PowerEngine/wave_record/log/init.go

78 lines
2.7 KiB
Go
Raw Normal View History

// Package log define log struct of wave record project
package log
import (
"os"
"sync"
"github.com/natefinch/lumberjack"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
var (
logger *zap.Logger
once sync.Once
)
2024-07-26 10:50:40 +08:00
// CutLogConfig define log config of wave record project
type CutLogConfig struct {
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 {
encodeConfig := zap.NewProductionEncoderConfig()
// serialization time eg:2006-01-02 15:04:05
encodeConfig.EncodeTime = zapcore.TimeEncoderOfLayout("2006-01-02 15:04:05")
encodeConfig.TimeKey = "time"
encodeConfig.EncodeLevel = zapcore.CapitalLevelEncoder
encodeConfig.EncodeCaller = zapcore.ShortCallerEncoder
return zapcore.NewJSONEncoder(encodeConfig)
}
// getLogWriter responsible for setting the location of log storage
func getLogWriter(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
}
syncFile := zapcore.AddSync(lumberJackLogger)
// TODO:增加调试输出到控制台设置,其他模式无控制台数据
syncConsole := zapcore.AddSync(os.Stderr)
return zapcore.NewMultiWriteSyncer(syncFile, syncConsole)
}
// initLogger return successfully initialized zap logger
2024-07-26 10:50:40 +08:00
func initLogger(lCfg CutLogConfig) *zap.Logger {
writeSyncer := getLogWriter(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
2024-07-26 10:50:40 +08:00
func GetLoggerInstance(lCfg CutLogConfig) *zap.Logger {
once.Do(func() {
logger = initLogger(lCfg)
})
return logger
}