如何使用 uber-go/zap 根据日志级别记录到 stdout 或 stderr?
问题:
配置 uber-go/zap 将信息日志写入 stdout,将错误和致命日志写入 stderr。
答案:
要实现此目的,使用具有两个内核的 zapcore.NewTee,每个内核集处理特定的日志级别:
<code class="go">import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" "os" ) func main() { // Create a level enabler for info logs infoLevel := zap.LevelEnablerFunc(func(level zapcore.Level) bool { return level == zapcore.InfoLevel }) // Create a level enabler for error and fatal logs errorFatalLevel := zap.LevelEnablerFunc(func(level zapcore.Level) bool { return level == zapcore.ErrorLevel || level == zapcore.FatalLevel }) // Create stdout and stderr writers stdoutSyncer := zapcore.Lock(os.Stdout) stderrSyncer := zapcore.Lock(os.Stderr) // Create a tee core that writes to both stdout and stderr core := zapcore.NewTee( // Core for info logs zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stdoutSyncer, infoLevel, ), // Core for error and fatal logs zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stderrSyncer, errorFatalLevel, ), ) // Create a logger with the tee core logger := zap.New(core) // Log info and error messages logger.Info("info log") logger.Error("error log") }</code>
此配置允许您控制不同日志级别的写入位置,为您的日志记录策略提供更大的灵活性。
以上是如何使用 uber-go/zap 将信息日志发送到 stdout 并将错误/致命日志发送到 stderr?的详细内容。更多信息请关注PHP中文网其他相关文章!