2015-10-06 126 views
2

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

作为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中),我可以设置其他属性,但是我可能希望包含不在消息中的其他属性。

回答

5

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

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

+0

我记得有关前两个选项的阅读,但由于某些原因,信息并未坚持。最后一个选项对我来说是新的,看起来像是目前最理想的选择。我问过的其他问题之一是使用MVC(ActionId,RequestId等)时的额外属性来自哪里?他们在哪里*注入*?他们代表什么?我仔细查看了一下代码,但不记得看到了它们的设置。无论如何,我已经标记了您提供的信息作为答案。谢谢。 –

+0

对不起,延迟回复。您经常看到的与网络相关的属性来自:https://github.com/serilog-web/classic。 –