2015-10-06 168 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。 –