Skip to content

高级特性 ​

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("服务启动")

参考:https://pkg.go.dev/go.uber.org/zap