uber-go/zap을 사용하여 stdout 및 stderr에 로깅
uber-go를 사용하여 다양한 로그 수준의 로깅을 stdout 및 stderr로 분리 /zap은 티 코어를 사용하여 달성할 수 있습니다. 티 코어는 여러 코어를 결합하여 레벨에 따라 다양한 대상에 로그를 기록할 수 있습니다.
티 코어 생성 방법
티 코어를 생성하려면, 두 개의 개별 코어를 구성해야 합니다. 하나는 stdout용이고 다른 하나는 stderr용입니다. 각 코어에는 로그 메시지 형식을 지정하는 인코더와 적절한 장치에 로그를 쓰는 동기화 장치가 포함되어 있습니다.
티 코어 예시
다음 스니펫은 생성 방법을 보여줍니다. 정보 로그를 stdout으로 분리하고 오류/치명적 로그를 stderr로 분리하는 티 코어:
<code class="go">package main import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" "os" ) func main() { // Syncers for stdout and stderr stdoutSyncer := zapcore.Lock(os.Stdout) stderrSyncer := zapcore.Lock(os.Stderr) // Create two 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 }, ) // Create two cores infoCore := zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stdoutSyncer, infoLevel, ) errorFatalCore := zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stderrSyncer, errorFatalLevel, ) // Combine the cores into a tee core teeCore := zapcore.NewTee( infoCore, errorFatalCore, ) // Create a logger with the tee core logger := zap.New( teeCore, ) // Log messages at different levels logger.Info("Info log") logger.Error("Error log") }</code>
출력 리디렉션
로그 출력의 분리를 확인하려면 다음을 수행합니다. stdout 또는 stderr를 /dev/null로 리디렉션하고 나머지 출력을 관찰합니다.
<code class="bash">$ go build main.go $ ./main 2>/dev/null # Shows only stdout { "level": "info", "ts": 1626900981.520349, "msg": "info log" } $ ./main 1>/dev/null # Shows only stderr { "level": "error", "ts": 1626901025.056065, "msg": "error log" }</code>
위 내용은 uber-go/zap을 사용하여 로그를 레벨별로 Stdout 및 Stderr로 분리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!