85 lines
2.8 KiB
Go
85 lines
2.8 KiB
Go
|
|
// Package log define log struct of wave record project
|
|||
|
|
package log
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"os"
|
|||
|
|
"sync"
|
|||
|
|
|
|||
|
|
"modelRT/constant"
|
|||
|
|
|
|||
|
|
"github.com/natefinch/lumberjack"
|
|||
|
|
"go.uber.org/zap"
|
|||
|
|
"go.uber.org/zap/zapcore"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
var (
|
|||
|
|
logger *zap.Logger
|
|||
|
|
once sync.Once
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// CutLogConfig define log config of wave record project
|
|||
|
|
type CutLogConfig struct {
|
|||
|
|
Mode string `json:"mode"` // Mode 日志模式 development、production
|
|||
|
|
Level string `json:"level"` // Level 最低日志等级,DEBUG<INFO<WARN<ERROR<FATAL INFO-->收集INFO等级以上的日志
|
|||
|
|
FileName string `json:"file_name"` // FileName 日志文件位置
|
|||
|
|
MaxSize int `json:"max_size"` // MaxSize 进行切割之前,日志文件的最大大小(MB为单位)默认为100MB
|
|||
|
|
MaxAge int `json:"max_age"` // MaxAge 是根据文件名中编码的时间戳保留旧日志文件的最大天数。
|
|||
|
|
MaxBackups int `json:"max_backups"` // MaxBackups 是要保留的旧日志文件的最大数量。默认是保留所有旧的日志文件(尽管 MaxAge 可能仍会导致它们被删除)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// getEncoder responsible for setting the log format for encoding
|
|||
|
|
func getEncoder() zapcore.Encoder {
|
|||
|
|
encoderConfig := zap.NewProductionEncoderConfig()
|
|||
|
|
// serialization time eg:2006-01-02 15:04:05
|
|||
|
|
encoderConfig.EncodeTime = zapcore.TimeEncoderOfLayout("2006-01-02 15:04:05")
|
|||
|
|
encoderConfig.TimeKey = "time"
|
|||
|
|
encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
|
|||
|
|
encoderConfig.EncodeCaller = zapcore.ShortCallerEncoder
|
|||
|
|
return zapcore.NewJSONEncoder(encoderConfig)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// getLogWriter responsible for setting the location of log storage
|
|||
|
|
func getLogWriter(mode, filename string, maxsize, maxBackup, maxAge int) zapcore.WriteSyncer {
|
|||
|
|
lumberJackLogger := &lumberjack.Logger{
|
|||
|
|
Filename: filename, // log file position
|
|||
|
|
MaxSize: maxsize, // log file maxsize
|
|||
|
|
MaxAge: maxAge, // maximum number of day files retained
|
|||
|
|
MaxBackups: maxBackup, // maximum number of old files retained
|
|||
|
|
Compress: false, // whether to compress
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
syncConsole := zapcore.AddSync(os.Stderr)
|
|||
|
|
if mode == constant.DevelopmentLogMode {
|
|||
|
|
return syncConsole
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
syncFile := zapcore.AddSync(lumberJackLogger)
|
|||
|
|
return zapcore.NewMultiWriteSyncer(syncFile, syncConsole)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// initLogger return successfully initialized zap logger
|
|||
|
|
func initLogger(lCfg CutLogConfig) *zap.Logger {
|
|||
|
|
writeSyncer := getLogWriter(lCfg.Mode, lCfg.FileName, lCfg.MaxSize, lCfg.MaxBackups, lCfg.MaxAge)
|
|||
|
|
encoder := getEncoder()
|
|||
|
|
|
|||
|
|
l := new(zapcore.Level)
|
|||
|
|
err := l.UnmarshalText([]byte(lCfg.Level))
|
|||
|
|
if err != nil {
|
|||
|
|
panic(err)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
core := zapcore.NewCore(encoder, writeSyncer, l)
|
|||
|
|
logger = zap.New(core, zap.AddCaller())
|
|||
|
|
zap.ReplaceGlobals(logger)
|
|||
|
|
|
|||
|
|
return logger
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// GetLoggerInstance return instance of zap logger
|
|||
|
|
func GetLoggerInstance(lCfg CutLogConfig) *zap.Logger {
|
|||
|
|
once.Do(func() {
|
|||
|
|
logger = initLogger(lCfg)
|
|||
|
|
})
|
|||
|
|
return logger
|
|||
|
|
}
|