高级特性
Zap 提供日志轮转、钩子、全局Logger等高级特性。
日志轮转
使用 lumberjack
go
import (
"go.uber.org/zap"
"gopkg.in/natefinch/lumberjack.v2"
)
func NewLogger() *zap.Logger {
writer := &lumberjack.Logger{
Filename: "logs/app.log",
MaxSize: 100, // MB
MaxBackups: 10,
MaxAge: 30, // days
Compress: true,
}
core := zapcore.NewCore(
zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
zapcore.AddSync(writer),
zap.InfoLevel,
)
return zap.New(core, zap.AddCaller())
}全局 Logger
设置全局 Logger
go
logger, _ := zap.NewProduction()
zap.ReplaceGlobals(logger)
zap.L().Info("使用全局 Logger")
zap.S().Infow("使用全局 Sugar", "key", "value")Hooks 钩子
go
func main() {
logger, _ := zap.NewProduction(zap.Hooks(func(entry zapcore.Entry) error {
if entry.Level >= zap.ErrorLevel {
notifyAlert(entry.Message)
}
return nil
}))
logger.Error("错误日志")
}自定义字段
添加字段到所有日志
go
logger = logger.With(
zap.String("service", "myapp"),
zap.String("version", "1.0.0"),
)
logger.Info("服务启动")