Добавить пользовательские свойства в Serilog

Я использую Serilog с приемником MS SQL Server в своем приложении. Предположим, что я определил следующий класс...

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 XML? Я хотел бы вывести его позже в подробном представлении моего приложения для просмотра журнала приложений.

В основном я ищу поведение, подобное разрушению объекта, но без печати плоского объекта как части сообщения журнала.

Ответ 1

Это так же просто, как:

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