如何使用 uber-go/zap 根据日志级别将日志输出到 stdout 和 stderr
根据严重性级别分离日志uber-go/zap,利用“tee-ing”zapcore 核心的概念。该方法利用结合了两个独立核心的 Tee 核心,每个核心都具有特定的级别启用器。
实现:
定义级别启用器:
<code class="go">infoLevel := zap.LevelEnablerFunc(func(level zapcore.Level) bool { return level == zapcore.InfoLevel }) errorFatalLevel := zap.LevelEnablerFunc(func(level zapcore.Level) bool { return level == zapcore.ErrorLevel || level == zapcore.FatalLevel })</code>
设置写入同步器:
<code class="go">stdoutSyncer := zapcore.Lock(os.Stdout) stderrSyncer := zapcore.Lock(os.Stderr)</code>
构造 Tee Core:
<code class="go">core := zapcore.NewTee( zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stdoutSyncer, infoLevel, ), zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stderrSyncer, errorFatalLevel, ), )</code>
创建记录器:
<code class="go">logger := zap.New(core)</code>
演示:
<code class="go">logger.Info("info log") logger.Error("error log")</code>
测试:
重定向标准输出或 stderr 到 /dev/null 以验证信息日志是否打印到 stdout,错误日志是否打印到 stderr:
$ go build main.go $ ./main 2>/dev/null # displays only stdout logs {"level":"info","ts":1626900981.520349,"msg":"info log"} $ ./main 1>/dev/null # displays only stderr logs {"level":"error","ts":1626901025.056065,"msg":"error log"}
以上是如何使用 uber-go/zap 按严重级别分离日志?的详细内容。更多信息请关注PHP中文网其他相关文章!