我使用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),但我可能想要包含消息中没有的其他属性。
答案 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上的信息。