98 lines
2.1 KiB
Go
98 lines
2.1 KiB
Go
package logging
|
|
|
|
import (
|
|
"os"
|
|
|
|
"go.uber.org/zap"
|
|
"go.uber.org/zap/zapcore"
|
|
"gopkg.in/natefinch/lumberjack.v2"
|
|
)
|
|
|
|
// Logger 全局日志实例
|
|
var Logger *zap.Logger
|
|
|
|
// Config 日志配置
|
|
type Config struct {
|
|
Level string `json:"level"`
|
|
Format string `json:"format"`
|
|
Output string `json:"output"`
|
|
MaxSize int `json:"max_size"`
|
|
MaxBackups int `json:"max_backups"`
|
|
MaxAge int `json:"max_age"`
|
|
}
|
|
|
|
// Init 初始化日志系统
|
|
func Init(cfg Config) error {
|
|
// 解析日志级别
|
|
level := zap.NewAtomicLevel()
|
|
switch cfg.Level {
|
|
case "debug":
|
|
level.SetLevel(zap.DebugLevel)
|
|
case "info":
|
|
level.SetLevel(zap.InfoLevel)
|
|
case "warn":
|
|
level.SetLevel(zap.WarnLevel)
|
|
case "error":
|
|
level.SetLevel(zap.ErrorLevel)
|
|
default:
|
|
level.SetLevel(zap.InfoLevel)
|
|
}
|
|
|
|
// 配置编码器
|
|
var encoder zapcore.Encoder
|
|
encoderConfig := zap.NewProductionEncoderConfig()
|
|
encoderConfig.TimeKey = "time"
|
|
encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
|
|
encoderConfig.CallerKey = "caller"
|
|
encoderConfig.MessageKey = "message"
|
|
encoderConfig.LevelKey = "level"
|
|
|
|
if cfg.Format == "console" {
|
|
encoder = zapcore.NewConsoleEncoder(encoderConfig)
|
|
} else {
|
|
encoder = zapcore.NewJSONEncoder(encoderConfig)
|
|
}
|
|
|
|
// 配置输出
|
|
var writeSyncer zapcore.WriteSyncer
|
|
if cfg.Output != "" {
|
|
// 使用文件轮转
|
|
lumberJackLogger := &lumberjack.Logger{
|
|
Filename: cfg.Output,
|
|
MaxSize: cfg.MaxSize,
|
|
MaxBackups: cfg.MaxBackups,
|
|
MaxAge: cfg.MaxAge,
|
|
Compress: true,
|
|
LocalTime: true,
|
|
}
|
|
writeSyncer = zapcore.AddSync(lumberJackLogger)
|
|
} else {
|
|
writeSyncer = zapcore.AddSync(os.Stdout)
|
|
}
|
|
|
|
// 创建核心
|
|
core := zapcore.NewCore(encoder, writeSyncer, level)
|
|
|
|
// 创建 logger
|
|
Logger = zap.New(core, zap.AddCaller(), zap.AddStacktrace(zap.ErrorLevel))
|
|
|
|
return nil
|
|
}
|
|
|
|
// GetLogger 获取日志实例
|
|
func GetLogger() *zap.Logger {
|
|
if Logger == nil {
|
|
// 如果未初始化,返回一个默认的 stdout logger
|
|
Logger, _ = zap.NewDevelopment()
|
|
}
|
|
return Logger
|
|
}
|
|
|
|
// Sync 刷新日志缓冲
|
|
func Sync() error {
|
|
if Logger != nil {
|
|
return Logger.Sync()
|
|
}
|
|
return nil
|
|
}
|