自定义日志,完全自定义

  1. func Logger() gin.HandlerFunc {
  2. return func(c *gin.Context) {
  3. var (
  4. payload []byte
  5. )
  6. reqMethod := c.Request.Method // 请求方式
  7. if reqMethod != http.MethodGet {
  8. payload, _ := io.ReadAll(c.Request.Body)
  9. c.Request.Body = io.NopCloser(bytes.NewReader(payload))
  10. }
  11. startTime := time.Now() // 开始时间
  12. c.Next() // 处理请求
  13. endTime := time.Now() // 结束时间
  14. latencyTime := endTime.Sub(startTime) // 执行时间
  15. reqUri := c.Request.RequestURI // 请求方式
  16. statusCode := c.Writer.Status() // 状态码
  17. clientIP := c.ClientIP() // 请求真实IP
  18. log.Log.Info("",
  19. zap.String("method", reqMethod),
  20. zap.String("uri", reqUri),
  21. zap.Int("code", statusCode),
  22. zap.Duration("latency", latencyTime),
  23. zap.String("client_ip", clientIP),
  24. zap.String("payload", string(payload)),
  25. )
  26. }
  27. }

自定义日志,改造自带的日志

  1. package main
  2. import (
  3. "HNLJ/commons"
  4. "HNLJ/middle"
  5. "HNLJ/route"
  6. "fmt"
  7. "github.com/gin-gonic/gin"
  8. "github.com/spf13/viper"
  9. "log"
  10. "net"
  11. "strings"
  12. "time"
  13. )
  14. // 全局参数初始化
  15. func init() {
  16. config := viper.New()
  17. config.SetConfigFile("./configs/app.toml")
  18. if err := config.ReadInConfig(); err != nil {
  19. log.Fatalf("读取app.toml配置文件错误, %s", err)
  20. }
  21. // 第一步:初始化参数
  22. commons.InitAppParam(config)
  23. // 第二步:初始化日志
  24. commons.InitLog()
  25. // 第三步:初始化mysql
  26. dbConfig := commons.NewDbConfig(config)
  27. dbConfig.InitDB()
  28. }
  29. func mylogformat(params gin.LogFormatterParams) string {
  30. msg := fmt.Sprintf("%s [%s] %s %s\n", params.Latency , "request", params.Request.URL.String(),params.StatusCode)
  31. return msg
  32. }
  33. func mylog() gin.HandlerFunc{
  34. conf := gin.LoggerConfig{
  35. Formatter:mylogformat,
  36. Output:commons.Log.Out,
  37. SkipPaths:[]string{"/commons/busi/list","/commons/news"}, // 哪些路由不记录日志
  38. }
  39. return gin.LoggerWithConfig(conf)
  40. }
  41. func main() {
  42. gin.SetMode(gin.ReleaseMode) // 上线模式
  43. r := gin.New()
  44. gin.Default()
  45. r.Use(mylog(),gin.Recovery(),middle.AllowCORS) //允许跨域
  46. route.Route(r)
  47. r.Run(net.JoinHostPort(commons.AppParam.ServerDomain,commons.AppParam.ServerPort))
  48. }

gin使用Logrus

  1. package commons
  2. import (
  3. "github.com/sirupsen/logrus"
  4. "gopkg.in/natefinch/lumberjack.v2"
  5. )
  6. var Log *logrus.Logger
  7. func InitLog() {
  8. logging :=logrus.New()
  9. logging.Formatter = &logrus.TextFormatter{TimestampFormat:"2006-01-02 15:04:05.999999999"}
  10. logging.SetOutput(&lumberjack.Logger{
  11. Filename: AppParam.LoggerLogPath + "/server.log",
  12. MaxSize: 500000 , // megabytes
  13. MaxBackups: 10,
  14. MaxAge: 10, //days
  15. Compress: true, // disabled by default
  16. })
  17. Log = logging
  18. }
  1. import (
  2. "os"
  3. "github.com/gin-gonic/gin"
  4. "github.com/sirupsen/logrus"
  5. )
  6. // 全局参数初始化
  7. func init() {
  8. commons.NewAppParam() // 第一步:初始化参数
  9. commons.InitLog() // 第二步:初始化日志
  10. }
  11. func main() {
  12. gin.DefaultWriter = commons.Log.Out
  13. r := gin.Default()
  14. route.Route(r)
  15. }