>  기사  >  백엔드 개발  >  uber-go/zap을 사용하여 정보 로그를 stdout으로 보내고 오류/치명적 로그를 stderr로 보내는 방법은 무엇입니까?

uber-go/zap을 사용하여 정보 로그를 stdout으로 보내고 오류/치명적 로그를 stderr로 보내는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-26 11:45:29943검색

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

uber-go/zap을 사용하여 로그 수준에 따라 stdout 또는 stderr에 로그인하는 방법은 무엇입니까?

문제:

정보 로그를 stdout에 기록하고 오류 및 치명적 로그를 stderr에 기록하도록 uber-go/zap을 구성합니다.

답변:

이를 달성하려면, 두 개의 코어가 있는 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으로 문의하세요.