Serilog 附加属性

Serilog Additional Properties

我使用 Serilog 并将事件记录到 SQL 服务器(使用 Serilog、Serilog.Framework.Logging 和 Serilog.Sinks.MSSqlServer 库)。

作为 MVC6 应用程序的一部分,当我记录事件并设置包含属性的选项时,我在 XML 列中看到一些额外的属性。

如果我发出类似下面的语句:

Log.Information("{Property1}", "Value1");

我在“属性”列中看到类似以下内容:

<properties>
  <property key="Property1">Value1</property>
  <property key="SourceContext">WebApplication4.Controllers.BaseController</property>
  <property key="ActionId">1b9f9c7e-7c5c-4b14-a30d-99f2ebc88c51</property>
  <property key="RequestId">80000191-0001-f000-b63f-84710c7967bb</property>
</properties>

这些额外的属性从何而来?我可以设置与这些类似的其他属性吗?如果是这样,我在哪里设置它们?如果我在消息中包含其他属性(类似于上面的 Property1),我可以设置其他属性,但我可能希望包含消息中没有的其他属性。

可以通过三种方式解决此问题。

第一种是使用ForContext()创建一个附加特定属性的记录器实例:

var specific = Log.ForContext("SomeProperty", 42);
specific.Information("This has properties attached");

第二种是使用增强剂:

Log.Logger = new LoggerConfiguration()
    .Enrich.WithMachineName()
    // Other config...

第三个是LogContext.

using (LogContext.PushProperty("SomeProperty", 42))
{
    Log.Information("This has properties attached");
}

为此需要进行一些小的设置,请查看 Serilog wiki 上的信息。