Serilog其他属性

时间:2015-10-06 16:04:48

标签: asp.net-core-mvc serilog

我使用Serilog并将事件记录到SQL Server(使用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),但我可能想要包含消息中没有的其他属性。

1 个答案:

答案 0 :(得分:6)

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

第一种方法是使用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上的信息。