>  기사  >  백엔드 개발  >  Uber-Go/Zap을 사용하여 정보 로그를 STDOUT으로 분리하고 오류/치명 로그를 STDERR로 분리하는 방법은 무엇입니까?

Uber-Go/Zap을 사용하여 정보 로그를 STDOUT으로 분리하고 오류/치명 로그를 STDERR로 분리하는 방법은 무엇입니까?

DDD
DDD원래의
2024-10-25 08:52:29231검색

How to Separate Info Logs to STDOUT and Error/Fatal Logs to STDERR Using Uber-Go/Zap?

Uber-Go/Zap을 사용하여 로그 수준에 따라 STDOUT 및 STDERR에 로그인하는 방법은 무엇입니까?

인기 있는 Go 로깅 라이브러리인 Zap, 수준에 따라 로그 메시지가 기록되는 위치를 제어할 수 있습니다. 작성하도록 Zap을 구성하는 방법은 다음과 같습니다.

  • STDOUT에 대한 정보 로그
  • STDERR에 대한 오류 및 치명적인 로그

별도의 코어와 함께 ZapCore.NewTee 사용:

이러한 분리를 달성하려면 두 개의 코어를 결합하는 티 코어를 생성합니다.

  • 1개의 코어 전용 InfoLevel에, STDOUT에 기록.
  • STDERR에 기록하는 ErrorLevel 및 FatalLevel 전용의 또 다른 코어.

다음은 이 기술을 보여주는 예제 프로그램입니다.

<code class="go">package main

import (
    "go.uber.org/zap"
    "go.uber.org/zap/zapcore"
    "os"
)

func main() {
    // 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
    })

    // Write syncers
    stdoutSyncer := zapcore.Lock(os.Stdout)
    stderrSyncer := zapcore.Lock(os.Stderr)

    // Tee core for InfoLevel and ErrorLevel/FatalLevel separation
    core := zapcore.NewTee(
        zapcore.NewCore(
            zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
            stdoutSyncer,
            infoLevel,
        ),
        zapcore.NewCore(
            zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
            stderrSyncer,
            errorFatalLevel,
        ),
    )

    // Create logger with tee core
    logger := zap.New(core)

    logger.Info("Info log")
    logger.Error("Error log")
}</code>

이 예에서 프로그램은 STDOUT에 정보 메시지를 기록하고 STDERR에 오류 메시지를 기록합니다. 해당 출력을 /dev/null:

<code class="bash"># stdout only
$ go build main.go && ./main 2>/dev/null
{
  "level": "info",
  "ts": <timestamp>,
  "msg": "Info log"
}

# stderr only
$ go build main.go && ./main 1>/dev/null
{
  "level": "error",
  "ts": <timestamp>,
  "msg": "Error log"
}</code>
으로 리디렉션하여 이를 확인할 수 있습니다.

위 내용은 Uber-Go/Zap을 사용하여 정보 로그를 STDOUT으로 분리하고 오류/치명 로그를 STDERR로 분리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.