如何将日志发送到不同的位置: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。
我需要将日志发送到 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。