首页 >后端开发 >Golang >如何使用 uber-go/zap 将信息日志发送到 stdout 并将错误/致命日志发送到 stderr?

如何使用 uber-go/zap 将信息日志发送到 stdout 并将错误/致命日志发送到 stderr?

Barbara Streisand
Barbara Streisand原创
2024-10-26 11:45:291010浏览

How to Send Info Logs to stdout and Error/Fatal Logs to stderr Using uber-go/zap?

如何使用 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn