> 백엔드 개발 > Golang > uber-go/zap을 사용하여 심각도 수준에 따라 로그를 분리하는 방법은 무엇입니까?

uber-go/zap을 사용하여 심각도 수준에 따라 로그를 분리하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-10-25 08:59:29
원래의
677명이 탐색했습니다.

How to Separate Logs by Severity Level Using uber-go/zap?

uber-go/zap을 사용하여 로그 수준에 따라 로그를 stdout 및 stderr로 출력하는 방법

심각도 수준에 따라 로그를 구분하려면 uber-go/zap에서는 zapcore 코어의 "티잉" 개념을 활용합니다. 이 접근 방식은 각각 특정 레벨 활성화 기능을 갖춘 두 개의 독립적인 코어를 결합하는 티 코어를 활용합니다.

구현:

  1. 레벨 활성화 기능 정의:

    <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>
    로그인 후 복사
  2. 쓰기 동기화 설정:

    <code class="go">stdoutSyncer := zapcore.Lock(os.Stdout)
    stderrSyncer := zapcore.Lock(os.Stderr)</code>
    로그인 후 복사
  3. 티 코어 구성:

    <code class="go">core := zapcore.NewTee(
     zapcore.NewCore(
         zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
         stdoutSyncer,
         infoLevel,
     ),
     zapcore.NewCore(
         zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
         stderrSyncer,
         errorFatalLevel,
     ),
    )</code>
    로그인 후 복사
  4. 로거 생성:

    <code class="go">logger := zap.New(core)</code>
    로그인 후 복사

데모:

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

테스트:
stdout 리디렉션 또는 stderr을 /dev/null로 설정하여 정보 로그가 stdout으로 인쇄되고 오류 로그가 stderr로 인쇄되는지 확인합니다.

$ go build main.go

$ ./main 2>/dev/null # displays only stdout logs
{&quot;level&quot;:&quot;info&quot;,&quot;ts&quot;:1626900981.520349,&quot;msg&quot;:&quot;info log&quot;}

$ ./main 1>/dev/null # displays only stderr logs
{&quot;level&quot;:&quot;error&quot;,&quot;ts&quot;:1626901025.056065,&quot;msg&quot;:&quot;error log&quot;}
로그인 후 복사

위 내용은 uber-go/zap을 사용하여 심각도 수준에 따라 로그를 분리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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