2015-01-11 260 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

完美!正是我在找什么。我阅读手册,但我必须忽略这一点。谢谢! –

相关问题