uber-go/zap を使用した stdout と stderr へのログ記録
uber-go を使用した異なるログ レベルのログ記録の stdout と stderr への分離/zap は、T コアを採用することで実現できます。 T コアは複数のコアを結合し、レベルに基づいてログを異なる宛先に書き込むことができます。
T コアの作成方法
T コアを作成するには、 2 つの個別のコアを構築する必要があります。1 つは標準出力用、もう 1 つは標準エラー出力用です。各コアには、ログ メッセージをフォーマットするためのエンコーダーと、適切なデバイスにログを書き込むためのシンサーが含まれています。
サンプル ティー コア
次のスニペットは、情報ログを stdout に、エラー/致命的ログを stderr に分離する t コア:
<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 を使用してログをレベルごとに標準出力と標準エラー出力に分ける方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。