控制台日志输出中不再复制消息

使用 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."
  }
}

破坏性变更的类型

此更改为行为更改

更改原因

此更改的目标是通过消除重复内容来减少不必要的日志记录开销。 通过避免重复设置同一消息的格式,更改有助于:

  • 最小化日志输出大小。
  • 减少冗余信息导致的混淆。
  • 通过阻止对同一消息执行多个格式设置作来提高性能。

总的来说,这会导致更简洁、更高效、更易于读取的日志。

之前如果分析过日志输出并从State对象中提取Message,现在由于已去除重复内容,可以安全地使用顶层Message

注释

在某些情况下,Message可能仍然会出现在State对象中。 当其内容与顶级 Message内容不同时,通常会发生这种情况。

受影响的 API