使用 uber-go/zap 记录到 stdout 和 stderr
使用 uber-go 将不同日志级别的日志记录分离到 stdout 和 stderr /zap 可以通过使用 T 形核心来实现。 Tee 核心结合了多个核心,允许根据级别将日志写入不同的目的地。
如何创建 Tee 核心
要创建 Tee 核心,您需要构建两个单独的核心:一个用于标准输出,另一个用于标准错误。每个核心都包含一个用于格式化日志消息的编码器和一个用于将日志写入适当设备的同步器。
Tee 核心示例
以下代码片段演示了如何创建将信息日志分离到 stdout 并将错误/致命日志分离到 stderr 的 tee 核心:
<code class="go">package main import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" "os" ) func main() { // Syncers for stdout and stderr stdoutSyncer := zapcore.Lock(os.Stdout) stderrSyncer := zapcore.Lock(os.Stderr) // Create two level enablers 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 }, ) // Create two cores infoCore := zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stdoutSyncer, infoLevel, ) errorFatalCore := zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stderrSyncer, errorFatalLevel, ) // Combine the cores into a tee core teeCore := zapcore.NewTee( infoCore, errorFatalCore, ) // Create a logger with the tee core logger := zap.New( teeCore, ) // Log messages at different levels logger.Info("Info log") logger.Error("Error log") }</code>
输出重定向
要验证日志输出的分离,您可以将 stdout 或 stderr 重定向到 /dev/null 并观察剩余的输出。
<code class="bash">$ go build main.go $ ./main 2>/dev/null # Shows only stdout { "level": "info", "ts": 1626900981.520349, "msg": "info log" } $ ./main 1>/dev/null # Shows only stderr { "level": "error", "ts": 1626901025.056065, "msg": "error log" }</code>
以上是如何使用 uber-go/zap 按级别将日志分离到 Stdout 和 Stderr?的详细内容。更多信息请关注PHP中文网其他相关文章!