> 백엔드 개발 > Golang > Uber Go Zap 라이브러리를 사용하여 다양한 수준의 로그를 stdout 및 stderr로 분리하려면 어떻게 해야 합니까?

Uber Go Zap 라이브러리를 사용하여 다양한 수준의 로그를 stdout 및 stderr로 분리하려면 어떻게 해야 합니까?

Linda Hamilton
풀어 주다: 2024-10-25 17:25:17
원래의
184명이 탐색했습니다.

How can you use Uber Go Zap library to separate logs of different levels to stdout and stderr?

uber-go/zap을 사용하여 로그 수준에 따라 stdout 및 stderr에 로그

소개

uber-go/zap 라이브러리는 강력한 로깅 기능을 제공합니다. 특정 요구 사항을 충족하려면 다양한 수준의 로그를 stdout 및 stderr와 같은 별도의 대상으로 보내는 것이 유리할 수 있습니다. 이 문서에서는 이러한 분리를 달성하여 심각도에 따라 적절한 장치에 로그가 기록되도록 하는 방법을 살펴봅니다.

사용자 정의 로깅 구성

uber에서 사용자 정의 로깅 동작을 지정하려면 -go/zap, zap.Config 구조체를 활용할 수 있습니다. OutputPaths 및 ErrorOutputPaths 필드를 수정하여 다양한 로그 수준에 대한 대상을 제어할 수 있습니다. 그러나 OutputPaths 또는 ErrorOutputPaths에 하나의 경로만 설정된 경우 모든 로그는 수준에 관계없이 해당 단일 대상에 기록됩니다.

해결책: Zapcore.NewTee

원하는 분리를 달성하기 위해 여러 코어를 결합하는 티 코어를 생성하는 zapcore.NewTee를 사용합니다. 각 코어는 특정 수준의 로그를 독립적으로 처리하고 이를 해당 대상으로 보낼 수 있습니다. 이 솔루션을 구현하는 방법은 다음과 같습니다.

<code class="go">import (
    "go.uber.org/zap"
    "go.uber.org/zap/zapcore"
    "os"
)

func main() {
    stdoutSyncer := zapcore.Lock(os.Stdout)
    stderrSyncer := zapcore.Lock(os.Stderr)

    infoCore := zapcore.NewCore(
        zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
        stdoutSyncer,
        zap.InfoLevel,
    )

    errorCore := zapcore.NewCore(
        zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
        stderrSyncer,
        zap.ErrorLevel,
    )

    core := zapcore.NewTee(infoCore, errorCore)
    logger := zap.New(core)

    logger.Info("info log")
    logger.Error("error log")
}</code>
로그인 후 복사

이 예에서는 두 개의 코어를 생성합니다. 하나는 정보 수준 로그(stdout에 기록)용이고 다른 하나는 오류 수준 로그(stderr에 기록)용입니다. zapcore.NewTee 기능은 이러한 코어를 결합하여 다양한 수준의 로그가 별도의 대상으로 전달될 수 있도록 합니다.

stdout 또는 stderr을 /dev/null로 리디렉션하면 각 로그 메시지가 실제로 다음에 기록되는지 추가로 확인할 수 있습니다. 레벨에 따라 올바른 장치를 선택하세요.

위 내용은 Uber Go Zap 라이브러리를 사용하여 다양한 수준의 로그를 stdout 및 stderr로 분리하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿