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 중국어 웹사이트의 기타 관련 기사를 참조하세요!