123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- package logger
- import (
- "encoding/json"
- "fmt"
- "github.com/druidcaesa/gotool"
- "github.com/gin-gonic/gin"
- rotatelogs "github.com/lestrrat-go/file-rotatelogs"
- "github.com/rifflock/lfshook"
- "github.com/sirupsen/logrus"
- "os"
- "path"
- "strconv"
- "time"
- "ulink-admin/config"
- "ulink-admin/frame"
- "ulink-admin/modules/system/models/model"
- "ulink-admin/modules/system/service"
- "ulink-admin/pkg/jwt/admin"
- "ulink-admin/pkg/resp"
- )
- type Logger struct {
- LogService *service.SysOperLogService `inject:""`
- }
- func NewLogger() *Logger {
- return &Logger{}
- }
- func (v *Logger) LoggerToFile() func(c *frame.Context) {
- logFilePath := config.GetLoggerCfg().LogPath
- logFileName := config.GetLoggerCfg().LogName
-
- fileName := path.Join(logFilePath, logFileName)
- if !gotool.FileUtils.Exists(fileName) {
- create, err := os.Create(fileName)
- if err != nil {
- gotool.Logs.ErrorLog().Println(err)
- }
- defer create.Close()
-
- }
-
- src, err := os.OpenFile(fileName, os.O_APPEND|os.O_WRONLY, os.ModeAppend)
- if err != nil {
- fmt.Println("err", err)
- }
-
- logger := logrus.New()
-
- logger.Out = src
-
- logger.SetLevel(logrus.DebugLevel)
-
- logWriter, err := rotatelogs.New(
-
- fileName+".%Y%m%d.log",
-
- rotatelogs.WithLinkName(fileName),
-
- rotatelogs.WithMaxAge(7*24*time.Hour),
-
- rotatelogs.WithRotationTime(24*time.Hour),
- )
- writeMap := lfshook.WriterMap{
- logrus.InfoLevel: logWriter,
- logrus.FatalLevel: logWriter,
- logrus.DebugLevel: logWriter,
- logrus.WarnLevel: logWriter,
- logrus.ErrorLevel: logWriter,
- logrus.PanicLevel: logWriter,
- }
- lfHook := lfshook.NewHook(writeMap, &logrus.JSONFormatter{
- TimestampFormat: "2006-01-02 15:04:05",
- })
-
- logger.AddHook(lfHook)
- return func(c *frame.Context) {
- c.Get("permission")
-
- startTime := time.Now()
-
- c.Next()
-
- endTime := time.Now()
-
- latencyTime := endTime.Sub(startTime)
-
- reqMethod := c.Request.Method
-
- reqUri := c.Request.RequestURI
-
- statusCode := c.Writer.Status()
-
- clientIP := c.ClientIP()
- user := admin.GetUserInfo(c)
- userType := 2
- userName := "游客"
- if user != nil {
- userType, _ = strconv.Atoi(user.UserType)
- userName = user.NickName
- }
-
- logger.WithFields(logrus.Fields{
- "status_code": statusCode,
- "latency_time": latencyTime,
- "client_ip": clientIP,
- "req_method": reqMethod,
- "req_uri": reqUri,
- }).Info()
- log := model.SysOperLog{}
- log.Status = statusCode
- log.BusinessType = 1
- log.OperatorType = userType
-
- log.RequestMethod = reqMethod
- log.OperName = userName
- log.OperIp = clientIP
- log.OperTime = time.Now()
- log.OperUrl = reqUri
- if statusCode == 200 {
- body := c.Writer.(*frame.BodyLogWriter).Body
- var rt resp.Response
- err := json.Unmarshal([]byte(body.String()), &rt)
- if err == nil {
- if rt.Status != 200 {
- log.ErrorMsg = rt.Msg
- }
- }
- }
- if gotool.StrUtils.HasNotEmpty(log.ErrorMsg) {
- v.LogService.Insert(&log)
- }
-
- }
- }
- func LoggerToMongo() gin.HandlerFunc {
- return func(c *gin.Context) {
- }
- }
- func LoggerToES() gin.HandlerFunc {
- return func(c *gin.Context) {
- }
- }
- func LoggerToMQ() gin.HandlerFunc {
- return func(c *gin.Context) {
- }
- }
|