uber-go/zap을 사용하여 로그 수준에 따라 stdout 또는 stderr에 로그인하는 방법은 무엇입니까?
문제:
정보 로그를 stdout에 기록하고 오류 및 치명적 로그를 stderr에 기록하도록 uber-go/zap을 구성합니다.
답변:
이를 달성하려면, 두 개의 코어가 있는 zapcore.NewTee를 사용하세요. 각 코어는 특정 로그 수준을 처리하도록 설정됩니다.
<code class="go">import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" "os" ) func main() { // Create a level enabler for info logs infoLevel := zap.LevelEnablerFunc(func(level zapcore.Level) bool { return level == zapcore.InfoLevel }) // Create a level enabler for error and fatal logs errorFatalLevel := zap.LevelEnablerFunc(func(level zapcore.Level) bool { return level == zapcore.ErrorLevel || level == zapcore.FatalLevel }) // Create stdout and stderr writers stdoutSyncer := zapcore.Lock(os.Stdout) stderrSyncer := zapcore.Lock(os.Stderr) // Create a tee core that writes to both stdout and stderr core := zapcore.NewTee( // Core for info logs zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stdoutSyncer, infoLevel, ), // Core for error and fatal logs zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stderrSyncer, errorFatalLevel, ), ) // Create a logger with the tee core logger := zap.New(core) // Log info and error messages logger.Info("info log") logger.Error("error log") }</code>
이 구성을 사용하면 다양한 로그 수준이 기록되는 위치를 제어할 수 있어 로깅 전략의 유연성이 향상됩니다.
위 내용은 uber-go/zap을 사용하여 정보 로그를 stdout으로 보내고 오류/치명적 로그를 stderr로 보내는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!