如何将日志发送到不同的位置:UberZap

How to send log to a different location : UberZap

我需要将日志发送到 go zap logger 中的不同位置。

我该怎么做?

zap 可以将日志发送到任何实现 WriteSyncer 接口的东西。这只是一个具有 Sync 方法的 io.Writer。如果你需要添加一个 no-op Sync 方法,你可以使用 zapcore.AddSync,或者如果你需要它对并发安全,你可以添加一个保护 与 zapcore.Lock.

互斥

基本上你会有这样的东西

var output zapcore.WriteSyncer = os.Stdout // for example
zapOutput := zapcore.Lock(output)
encoder := zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig())
// you could also use zap.NewDevelopmentEncoderConfig()
// define what level you want to log
priority := zap.LevelEnablerFunc(func(lvl zapcore.Level) bool {
    return lvl >= zapcore.ErrorLevel
})
// Join the outputs, encoders, and level-handling functions into
// zapcore.Cores, then tee the four cores together.
core := zapcore.NewTee(
    zapcore.NewCore(encoder, zapOutput, priority),
    // you can add other cores here to log to multiple places
)

logger := zap.New(core) // this is your logger
defer logger.Sync()     // don't forget to sync
logger.Info("constructed a logger") // example log

有关详细信息,请参阅 docs