log_2_file.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. package middleware
  2. import (
  3. "confrontation-training/common"
  4. "confrontation-training/global"
  5. "fmt"
  6. "github.com/gin-gonic/gin"
  7. rotatelogs "github.com/lestrrat-go/file-rotatelogs"
  8. "github.com/rifflock/lfshook"
  9. "github.com/sirupsen/logrus"
  10. "os"
  11. "path"
  12. "time"
  13. )
  14. // LoggerToFile 日志记录到文件
  15. func LoggerToFile() gin.HandlerFunc {
  16. logFilePath := global.Config.Log2File.FilePath + common.NowTime("2006-01-02")
  17. logFileName := global.Config.Log2File.FileName + global.Config.Log2File.FileSuffix
  18. // 日志文件
  19. fileName := path.Join(logFilePath, logFileName)
  20. // 写入文件
  21. //src, err := os.OpenFile(fileName, os.O_CREATE|os.O_APPEND|os.O_WRONLY, os.ModeAppend)
  22. src, err := os.OpenFile(fileName, os.O_CREATE|os.O_APPEND|os.O_RDWR, os.ModeAppend)
  23. if err != nil {
  24. fmt.Println("err", err)
  25. }
  26. // 实例化
  27. logger := logrus.New()
  28. // 设置输出
  29. logger.Out = src
  30. // 设置日志级别
  31. logger.SetLevel(logrus.DebugLevel)
  32. logger.SetFormatter(&logrus.JSONFormatter{TimestampFormat: "2006-01-02 15:04:05"})
  33. // 设置 rotatelogs
  34. logWriter, err := rotatelogs.New(
  35. // 分割后的文件名称
  36. fileName+".%Y%m%d.log",
  37. // 生成软链,指向最新日志文件
  38. rotatelogs.WithLinkName(fileName),
  39. // 设置最大保存时间(7天)
  40. rotatelogs.WithMaxAge(7*24*time.Hour),
  41. // 设置日志切割时间间隔(1天)
  42. rotatelogs.WithRotationTime(24*time.Hour),
  43. )
  44. writeMap := lfshook.WriterMap{
  45. logrus.InfoLevel: logWriter,
  46. logrus.FatalLevel: logWriter,
  47. logrus.DebugLevel: logWriter,
  48. logrus.WarnLevel: logWriter,
  49. logrus.ErrorLevel: logWriter,
  50. logrus.PanicLevel: logWriter,
  51. }
  52. lfHook := lfshook.NewHook(writeMap, &logrus.JSONFormatter{
  53. TimestampFormat: "2006-01-02 15:04:05",
  54. })
  55. // 新增 Hook
  56. logger.AddHook(lfHook)
  57. return func(c *gin.Context) {
  58. // 开始时间
  59. startTime := time.Now()
  60. // 处理请求
  61. c.Next()
  62. // 结束时间
  63. endTime := time.Now()
  64. // 执行时间
  65. latencyTime := endTime.Sub(startTime)
  66. // 请求方式
  67. reqMethod := c.Request.Method
  68. // 请求路由
  69. reqUri := c.Request.RequestURI
  70. // 状态码
  71. statusCode := c.Writer.Status()
  72. // 请求IP
  73. //clientIP := c.ClientIP()
  74. clientIP := c.RemoteIP()
  75. // 日志格式
  76. logger.WithFields(logrus.Fields{
  77. "status_code": statusCode,
  78. "latency_time": latencyTime,
  79. "client_ip": clientIP,
  80. "req_method": reqMethod,
  81. "req_uri": reqUri,
  82. }).Info()
  83. }
  84. }
  85. // LoggerToMongo 日志记录到 MongoDB
  86. func LoggerToMongo() gin.HandlerFunc {
  87. return func(c *gin.Context) {
  88. }
  89. }
  90. // LoggerToES 日志记录到 ES
  91. func LoggerToES() gin.HandlerFunc {
  92. return func(c *gin.Context) {
  93. }
  94. }
  95. // LoggerToMQ 日志记录到 MQ
  96. func LoggerToMQ() gin.HandlerFunc {
  97. return func(c *gin.Context) {
  98. }
  99. }