zap can send logs to anything that implemnts the WriteSyncer interface. Which is simply an io.Writer which has a Sync method. If you need to add a no-op Sync method you can use zapcore.AddSync, or if you need it to be safe for concurrent you can add a protecting
mutex with zapcore.Lock.
Basically you'd have something like
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
zap can send logs to anything that implemnts the WriteSyncer interface. Which is simply an
io.Writer
which has aSync
method. If you need to add a no-opSync
method you can usezapcore.AddSync
, or if you need it to be safe for concurrent you can add a protecting mutex withzapcore.Lock
.Basically you'd have something like
See the docs for more detail.