使用 JSON 格式器登入主控台時,記錄訊息不會再重複於記錄輸出中。 先前,訊息通常會出現三次:一次做為最上層 Message,在物件中 State 再次出現,第三次顯示為原始格式字串。
推出的版本
.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 會出現兩次:一次做為最上層 Message ,再一次出現在 物件內 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