JSON フォーマッタを使用してコンソールにログを記録する場合、ログ メッセージはログ出力で重複しなくなります。 以前は、メッセージは通常、最上位レベルの Messageとして 1 回、 State オブジェクト内でもう一度、元の書式指定文字列として 3 回表示されます。
導入されたバージョン
.NET 10
以前の動作
以前は、JSON フォーマッタで構成されたコンソール ロガーを使用すると、ログ メッセージが出力で複製されていました。 たとえば、コード logger.LogInformation("This is an information message."); 次の出力が生成されます。
{
"EventId": 0,
"LogLevel": "Information",
"Category": "Program",
"Message": "This is an information message.",
"State": {
"Message": "This is an information message.",
"{OriginalFormat}": "This is an information message."
}
}
ご覧のように、 Message は 2 回表示されます。最上位レベルの Message として 1 回、 State オブジェクト内にもう一度表示されます。
新しい動作
.NET 10 以降では、 Message は最上位レベルにのみ表示され、 State オブジェクト内には表示されません (通常)。 ログ出力は次のようになります。
{
"EventId": 0,
"LogLevel": "Information",
"Category": "Program",
"Message": "This is an information message.",
"State": {
"{OriginalFormat}": "This is an information message."
}
}
破壊的変更の種類
この変更は 動作の変更です。
変更の理由
この変更の目的は、重複するコンテンツを排除することで、不要なログのオーバーヘッドを減らすことです。 同じメッセージの繰り返しの書式設定を回避することで、この変更は次のことに役立ちます。
- ログ出力サイズを最小限に抑えます。
- 冗長な情報による混乱を減らします。
- 同じメッセージに対して複数の書式設定操作を防ぐことで、パフォーマンスを向上させます。
全体として、これにより、よりクリーンで効率的で読みやすいログが得られます。
推奨されるアクション
Message オブジェクト内からStateを抽出するためにログ出力を解析したことがある場合は、その重複が削除されたので、最上位レベルのMessageを使用しても安全です。
注
場合によっては、 Message が State オブジェクト内に引き続き表示されることがあります。 これは通常、コンテンツが最上位の Messageと異なる場合に発生します。
影響を受ける API
- Microsoft.Extensions.Logging.ConsoleLoggerExtensions.AddConsole
- Microsoft.Extensions.Logging.ConsoleLoggerExtensions.AddConsoleFormatter
- Microsoft.Extensions.Logging.ConsoleLoggerExtensions.AddJsonConsole
- Microsoft.Extensions.Logging.ConsoleLoggerExtensions.AddSimpleConsole
- Microsoft.Extensions.Logging.ConsoleLoggerExtensions.AddSystemdConsole
.NET