Serilog附加属性

Jas*_*ier 2 serilog asp.net-core-mvc

我使用Serilog并将事件记录到SQL Server(使用Serilog,Serilog.Framework.Logging和Serilog.Sinks.MSSqlServer库).

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

如果我发出类似以下声明的内容:

Log.Information("{Property1}", "Value1");
Run Code Online (Sandbox Code Playgroud)

我在Properties列中看到如下内容:

<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>
Run Code Online (Sandbox Code Playgroud)

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

Nic*_*rdt 6

有三种方法可以解决这个问题.

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

var specific = Log.ForContext("SomeProperty", 42);
specific.Information("This has properties attached");
Run Code Online (Sandbox Code Playgroud)

第二种是使用浓缩物:

Log.Logger = new LoggerConfiguration()
    .Enrich.WithMachineName()
    // Other config...
Run Code Online (Sandbox Code Playgroud)

第三是LogContext.

using (LogContext.PushProperty("SomeProperty", 42))
{
    Log.Information("This has properties attached");
}
Run Code Online (Sandbox Code Playgroud)

这需要一些小的设置,请查看Serilog wiki上的信息.