自定义日志,完全自定义
func Logger() gin.HandlerFunc { return func(c *gin.Context) { var ( payload []byte ) reqMethod := c.Request.Method // 请求方式 if reqMethod != http.MethodGet { payload, _ := io.ReadAll(c.Request.Body) c.Request.Body = io.NopCloser(bytes.NewReader(payload)) } startTime := time.Now() // 开始时间 c.Next() // 处理请求 endTime := time.Now() // 结束时间 latencyTime := endTime.Sub(startTime) // 执行时间 reqUri := c.Request.RequestURI // 请求方式 statusCode := c.Writer.Status() // 状态码 clientIP := c.ClientIP() // 请求真实IP log.Log.Info("", zap.String("method", reqMethod), zap.String("uri", reqUri), zap.Int("code", statusCode), zap.Duration("latency", latencyTime), zap.String("client_ip", clientIP), zap.String("payload", string(payload)), ) }}
自定义日志,改造自带的日志
package mainimport ( "HNLJ/commons" "HNLJ/middle" "HNLJ/route" "fmt" "github.com/gin-gonic/gin" "github.com/spf13/viper" "log" "net" "strings" "time")// 全局参数初始化func init() { config := viper.New() config.SetConfigFile("./configs/app.toml") if err := config.ReadInConfig(); err != nil { log.Fatalf("读取app.toml配置文件错误, %s", err) } // 第一步:初始化参数 commons.InitAppParam(config) // 第二步:初始化日志 commons.InitLog() // 第三步:初始化mysql dbConfig := commons.NewDbConfig(config) dbConfig.InitDB()}func mylogformat(params gin.LogFormatterParams) string { msg := fmt.Sprintf("%s [%s] %s %s\n", params.Latency , "request", params.Request.URL.String(),params.StatusCode) return msg}func mylog() gin.HandlerFunc{ conf := gin.LoggerConfig{ Formatter:mylogformat, Output:commons.Log.Out, SkipPaths:[]string{"/commons/busi/list","/commons/news"}, // 哪些路由不记录日志 } return gin.LoggerWithConfig(conf)}func main() { gin.SetMode(gin.ReleaseMode) // 上线模式 r := gin.New() gin.Default() r.Use(mylog(),gin.Recovery(),middle.AllowCORS) //允许跨域 route.Route(r) r.Run(net.JoinHostPort(commons.AppParam.ServerDomain,commons.AppParam.ServerPort))}
gin使用Logrus
package commonsimport ( "github.com/sirupsen/logrus" "gopkg.in/natefinch/lumberjack.v2")var Log *logrus.Loggerfunc InitLog() { logging :=logrus.New() logging.Formatter = &logrus.TextFormatter{TimestampFormat:"2006-01-02 15:04:05.999999999"} logging.SetOutput(&lumberjack.Logger{ Filename: AppParam.LoggerLogPath + "/server.log", MaxSize: 500000 , // megabytes MaxBackups: 10, MaxAge: 10, //days Compress: true, // disabled by default }) Log = logging}
import ( "os" "github.com/gin-gonic/gin" "github.com/sirupsen/logrus")// 全局参数初始化func init() { commons.NewAppParam() // 第一步:初始化参数 commons.InitLog() // 第二步:初始化日志}func main() { gin.DefaultWriter = commons.Log.Out r := gin.Default() route.Route(r)}