uber-go/zap을 사용하여 로그 수준에 따라 로그를 stdout 및 stderr로 출력하는 방법
심각도 수준에 따라 로그를 구분하려면 uber-go/zap에서는 zapcore 코어의 "티잉" 개념을 활용합니다. 이 접근 방식은 각각 특정 레벨 활성화 기능을 갖춘 두 개의 독립적인 코어를 결합하는 티 코어를 활용합니다.
구현:
레벨 활성화 기능 정의:
<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>
쓰기 동기화 설정:
<code class="go">stdoutSyncer := zapcore.Lock(os.Stdout) stderrSyncer := zapcore.Lock(os.Stderr)</code>
티 코어 구성:
<code class="go">core := zapcore.NewTee( zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stdoutSyncer, infoLevel, ), zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stderrSyncer, errorFatalLevel, ), )</code>
로거 생성:
<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 {"level":"info","ts":1626900981.520349,"msg":"info log"} $ ./main 1>/dev/null # displays only stderr logs {"level":"error","ts":1626901025.056065,"msg":"error log"}
위 내용은 uber-go/zap을 사용하여 심각도 수준에 따라 로그를 분리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!