MyUrls/logger.go
2024-03-23 05:19:56 -04:00

113 lines
2.8 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package main
import (
"os"
"path"
"time"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
)
var logger *zap.SugaredLogger
const (
logFileMaxSize = 50 // 日志文件最大大小MB
logFileMaxBackups = 10 // 最多保留的备份文件数量
logFileMaxAge = 7 // 日志文件最长保留天数
logFileCompress = false // 是否压缩备份文件
)
func InitLogger() {
// 创建 logs 目录
createLogPath()
// 初始化 zap logger
initZapLogger()
}
// createLogPath 创建 logs 目录
func createLogPath() error {
if dir, err := os.Getwd(); err == nil {
logFilePath := dir + "/logs/"
if err := os.MkdirAll(logFilePath, 0777); err != nil {
panic("create log path failed: " + err.Error())
}
}
return nil
}
// getLogPath 获取 logs 目录
func getLogPath() string {
if dir, err := os.Getwd(); err == nil {
return dir + "/logs/"
}
return ""
}
// 定义 zap logger
func initZapLogger() {
encoder := getEncoder()
core := zapcore.NewCore(encoder, zapcore.AddSync(os.Stdout), zapcore.DebugLevel)
logger = zap.New(core).Sugar()
}
// getEncoder 获取 zap encoder
func getEncoder() zapcore.Encoder {
return zapcore.NewConsoleEncoder(zap.NewDevelopmentEncoderConfig())
}
// initGinLogger 初始化 gin logger
func initGinLogger() *zap.Logger {
logPath := getLogPath()
logFileName := "access.log"
// 日志文件
logFile := path.Join(logPath, logFileName)
lumberJackLogger := &lumberjack.Logger{
Filename: logFile,
MaxSize: logFileMaxSize, // 日志文件最大大小MB
MaxBackups: logFileMaxBackups, // 最多保留的备份文件数量
MaxAge: logFileMaxAge, // 日志文件最长保留天数
Compress: logFileCompress, // 是否压缩备份文件
}
writeSyncer := zapcore.AddSync(lumberJackLogger)
encoderConfig := zap.NewProductionEncoderConfig()
encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
encoderConfig.EncodeCaller = nil
encoderConfig.EncodeDuration = zapcore.SecondsDurationEncoder
encoder := zapcore.NewConsoleEncoder(encoderConfig)
core := zapcore.NewCore(encoder, writeSyncer, zapcore.InfoLevel)
return zap.New(core, zap.AddCaller())
}
// initServiceLogger 初始化服务日志
func initServiceLogger() gin.HandlerFunc {
_logger := initGinLogger()
return func(c *gin.Context) {
start := time.Now()
path := c.Request.URL.Path
c.Next()
_logger.Info(
"request",
zap.String("time", start.Format(time.RFC3339)),
zap.String("method", c.Request.Method),
zap.String("ip", c.ClientIP()),
zap.String("user-agent", c.Request.UserAgent()),
zap.String("path", path),
zap.Int("status", c.Writer.Status()),
zap.Duration("latency", time.Since(start)),
)
}
}