Logrus 封装

Logrus 封装

pkg/logger/logger.go

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/**
 * @Time : 01/04/2023 13:00 PM
 * @Author : zpjcetacean@gmail.com
 * @File : logger
 * @Software: VSCode
 */

package logger

import (
	"path"
	"time"

	"github.com/gin-gonic/gin"
	"github.com/sirupsen/logrus"
	"gopkg.in/natefinch/lumberjack.v2"
)

var logger *logrus.Logger

const (
	TimestampFormat = "2006-01-02 15:04:05"
	LOG_NAME        = "glink_log"
	LOG_SUFFIX      = ".log"
	LOG_SIZE        = 50
	LOG_BACKUP      = 10
	LOG_DATE        = 7
)

func setOutPut(log *logrus.Logger, log_file_path string) {
	logconf := &lumberjack.Logger{
		Filename:   log_file_path,
		MaxSize:    LOG_SIZE,
		MaxBackups: LOG_BACKUP,
		MaxAge:     LOG_DATE,
		Compress:   true,
	}
	log.SetOutput(logconf)
}

func InitLogger() {
	log_file_path := path.Join("./", LOG_NAME+LOG_SUFFIX)
	logger = logrus.New()
	setOutPut(logger, log_file_path)
	logger.SetLevel(logrus.DebugLevel)
	logger.SetFormatter(&logrus.JSONFormatter{
		TimestampFormat: TimestampFormat,
	})
}

func GetLogger() *logrus.Logger {
	return logger
}

func LoggerToFile() gin.HandlerFunc {
	return func(c *gin.Context) {
		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()              //请求IP
		logger.Infof("| %3d | %13v | %15s | %s | %s", statusCode, latencyTime, clientIP, reqMethod, reqUri)
	}
}

使用

  • route 中的使用
1
2
3
4
5
6
func InitRouter(r *gin.Engine) *gin.Engine  {
	r.Use(config.LoggerToFile())//添加日志记录
	r.POST("/v1/ping", controller.ping)
	...
	return r
}
  • 逻辑中的使用
1
logger.GetLogger().Debugf("Debug Logger.")