You've already forked VptPassiveAdapter
89 lines
2.2 KiB
Go
89 lines
2.2 KiB
Go
package logger
|
|
|
|
import (
|
|
"go.uber.org/zap"
|
|
"go.uber.org/zap/zapcore"
|
|
"gopkg.in/natefinch/lumberjack.v2"
|
|
)
|
|
|
|
var Logger *zap.Logger
|
|
|
|
// atomicLevel 持有当前生效的日志级别,支持在配置加载完成后动态调整(无需重建 Logger)
|
|
var atomicLevel = zap.NewAtomicLevelAt(zap.InfoLevel)
|
|
|
|
func Init() error {
|
|
config := zap.NewProductionConfig()
|
|
config.OutputPaths = []string{"stdout"}
|
|
config.ErrorOutputPaths = []string{"stderr"}
|
|
|
|
// 配置日志轮换
|
|
lumberJackLogger := &lumberjack.Logger{
|
|
Filename: "logs/app.log",
|
|
MaxSize: 10, // MB
|
|
MaxBackups: 3,
|
|
MaxAge: 30, // days
|
|
Compress: true,
|
|
}
|
|
|
|
// 创建写入器
|
|
w := zapcore.AddSync(lumberJackLogger)
|
|
|
|
// 创建编码器配置
|
|
encoderConfig := zap.NewProductionEncoderConfig()
|
|
encoderConfig.TimeKey = "time"
|
|
encoderConfig.EncodeTime = zapcore.TimeEncoderOfLayout("2006-01-02 15:04:05")
|
|
encoderConfig.EncodeCaller = zapcore.ShortCallerEncoder
|
|
encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
|
|
encoderConfig.MessageKey = "msg"
|
|
encoderConfig.CallerKey = "caller"
|
|
|
|
// 创建控制台编码器(文本格式)
|
|
encoder := zapcore.NewConsoleEncoder(encoderConfig)
|
|
|
|
// 创建核心
|
|
core := zapcore.NewCore(encoder, w, atomicLevel)
|
|
|
|
// 创建日志记录器
|
|
Logger = zap.New(core, zap.AddCaller(), zap.AddStacktrace(zapcore.ErrorLevel))
|
|
|
|
return nil
|
|
}
|
|
|
|
// SetLevel 动态调整日志级别,可在配置文件加载完成后调用(例如开启 debug 日志排查问题)。
|
|
// levelStr 支持 debug/info/warn/error 等,为空或非法值时保持当前级别不变并返回错误。
|
|
func SetLevel(levelStr string) error {
|
|
if levelStr == "" {
|
|
return nil
|
|
}
|
|
var level zapcore.Level
|
|
if err := level.UnmarshalText([]byte(levelStr)); err != nil {
|
|
return err
|
|
}
|
|
atomicLevel.SetLevel(level)
|
|
return nil
|
|
}
|
|
|
|
func Info(message string, fields ...zap.Field) {
|
|
Logger.Info(message, fields...)
|
|
}
|
|
|
|
func Error(message string, fields ...zap.Field) {
|
|
Logger.Error(message, fields...)
|
|
}
|
|
|
|
func Warn(message string, fields ...zap.Field) {
|
|
Logger.Warn(message, fields...)
|
|
}
|
|
|
|
func Debug(message string, fields ...zap.Field) {
|
|
Logger.Debug(message, fields...)
|
|
}
|
|
|
|
func Fatal(message string, fields ...zap.Field) {
|
|
Logger.Fatal(message, fields...)
|
|
}
|
|
|
|
func Sync() error {
|
|
return Logger.Sync()
|
|
}
|