2015-01-11 5 views
10

Я использую Serilog с раковиной MS SQL Server в своем приложении. Давайте предположим, что я определил следующий класс ...Добавить пользовательские свойства в 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

Я вижу, что это довольно просто. Поддерживает ли этот метод деструктурирование объектов с сложным типом (например, свойство * Father * типа «Person»)? Меня больше интересуют значения свойств, чем представление 'ToString()'. –

+5

Абсолютно - 'Log.ForContext (« Отец », отец, destructureObjects: true)' делает это. –

+0

Отлично! Именно то, что я искал. Я прочитал руководство, но я должен был как-то упустить это. Спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^