Uber-Go/Zap을 사용하여 로그 수준에 따라 STDOUT 및 STDERR에 로그인하는 방법은 무엇입니까?
인기 있는 Go 로깅 라이브러리인 Zap, 수준에 따라 로그 메시지가 기록되는 위치를 제어할 수 있습니다. 작성하도록 Zap을 구성하는 방법은 다음과 같습니다.
별도의 코어와 함께 ZapCore.NewTee 사용:
이러한 분리를 달성하려면 두 개의 코어를 결합하는 티 코어를 생성합니다.
다음은 이 기술을 보여주는 예제 프로그램입니다.
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!