2015-01-11 258 views
10

我在我的應用程序中使用帶有MS SQL Server接收器的Serilog。假設我已經定義了以下類...將自定義屬性添加到Serilog

public class Person 
{ 
  public string FirstName { get; set; } 
  public string LastName { get; set; } 

  public DateTime BirthDate { get; set; } 
  // ... more properties 
} 

...並創建一個實例:

var person = new Person 
{ 
    FirstName = "John", 
    LastName = "Doe", 
    BirthDate = DateTime.UtcNow.AddYears(-25) 
}; 

我已經把以下日誌呼叫在我的代碼:

Log.Information("New user: {FirstName:l} {LastName:l}", 
    person.FirstName, person.LastName); 

是否有可能還記錄BirthDate屬性而不將其添加到消息模板,以便它在Properties XM內呈現L列?我想稍後在我的應用程序日誌查看器的詳細信息視圖中輸出它。

我基本上尋找類似於對象解構的行爲,但沒有將平面對象作爲日誌消息的一部分進行打印。

回答

12

這很簡單,只要:

Log.ForContext("BirthDate", person.BirthDate) 
    .Information("New user: {FirstName:l} {LastName:l}", 
          person.FirstName, person.LastName); 
+0

我明白了,這是非常簡單的。該方法是否也允許解構具有複雜類型的對象(如* Person *類型的Father *屬性)?我比'ToString()'表示更感興趣屬性的值。 –

+5

絕對 - Log.ForContext(「父親」,父親,destructureObjects:true)'這樣做。 –

+0

完美!正是我在找什麼。我閱讀手冊,但我必須忽略這一點。謝謝! –

相關問題