uber-go/zap を使用してログ レベルに基づいて stdout または stderr にログを記録する方法?
問題:
情報ログを標準出力に書き込み、エラーと致命的なログを標準エラー出力に書き込むように uber-go/zap を設定します。
答え:
これを実現するには、次のようにします。 zapcore.NewTee を 2 つのコアで使用し、それぞれが特定のログ レベルを処理するように設定されています。
<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 を使用して情報ログを標準出力に送信し、エラー/致命的ログを標準エラー出力に送信するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。