Initial commit
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user