我使用Serilog和将事件记录到Server (使用Serilog、Serilog.Framework.Logging和Serilog.Sinks.MSSqlServer库)。
作为MVC6应用程序的一部分,当我记录事件并将选项设置为包含属性时,我会在XML列中看到一些附加属性。
如果我发布如下声明:
Log.Information("{Property1}", "Value1");我在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>这些额外的财产从何而来?我可以设置类似于这些的其他属性吗?如果是的话,我该把它们放在哪里呢?如果我将它们包含在消息中(类似于上面的Property1 ),我可以设置其他属性,但是我可能希望包含消息中没有的附加属性。
发布于 2015-10-07 08:49:21
要做到这一点有三种方法。
第一种方法是使用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上的信息。
https://stackoverflow.com/questions/32974560
复制相似问题