Skip to content

配置选项 ​

Zap 提供灵活的配置选项。

Config 结构 ​

生产配置 ​

go
config := zap.NewProductionConfig()
config.Level = zap.NewAtomicLevelAt(zap.InfoLevel)
config.EncoderConfig.TimeKey = "timestamp"
config.EncoderConfig.EncodeTime = zap.ISO8601TimeEncoder

logger, _ := config.Build()

开发配置 ​

go
config := zap.NewDevelopmentConfig()
config.EncoderConfig.EncodeLevel = zap.CapitalColorLevelEncoder

logger, _ := config.Build()

编码器配置 ​

JSON 编码器 ​

go
encoderConfig := zapcore.EncoderConfig{
    TimeKey:        "ts",
    LevelKey:       "level",
    NameKey:        "logger",
    CallerKey:      "caller",
    MessageKey:     "msg",
    StacktraceKey:  "stacktrace",
    LineEnding:     zapcore.DefaultLineEnding,
    EncodeLevel:    zapcore.LowercaseLevelEncoder,
    EncodeTime:     zapcore.ISO8601TimeEncoder,
    EncodeDuration: zapcore.SecondsDurationEncoder,
    EncodeCaller:   zapcore.ShortCallerEncoder,
}

encoder := zapcore.NewJSONEncoder(encoderConfig)

Console 编码器 ​

go
encoderConfig := zapcore.EncoderConfig{
    TimeKey:        "T",
    LevelKey:       "L",
    NameKey:        "N",
    CallerKey:      "C",
    MessageKey:     "M",
    StacktraceKey:  "S",
    LineEnding:     zapcore.DefaultLineEnding,
    EncodeLevel:    zapcore.CapitalColorLevelEncoder,
    EncodeTime:     zapcore.TimeEncoderOfLayout("2006-01-02 15:04:05"),
    EncodeCaller:   zapcore.ShortCallerEncoder,
}

encoder := zapcore.NewConsoleEncoder(encoderConfig)

输出配置 ​

文件输出 ​

go
file, _ := os.OpenFile("app.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)

core := zapcore.NewCore(
    zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
    zapcore.AddSync(file),
    zap.InfoLevel,
)

logger := zap.New(core)

多输出 ​

go
core := zapcore.NewTee(
    zapcore.NewCore(zapcore.NewJSONEncoder(encoderConfig), os.Stdout, zap.InfoLevel),
    zapcore.NewCore(zapcore.NewConsoleEncoder(encoderConfig), file, zap.WarnLevel),
)

logger := zap.New(core)

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