2015-01-11 17 views
10

Sto utilizzando Serilog con un sink di MS SQL Server nella mia applicazione. Supponiamo che io ho definito la seguente classe ...Aggiungere proprietà personalizzate a Serilog

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

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

... e ha creato un caso:

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

ho messo il seguente invito registro nel mio codice:

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

È anche possibile registrare la proprietà BirthDatesenza aggiungerla al modello di messaggio in modo che sia resa all'interno dello XM Properties L colonna? Mi piacerebbe inviarlo in seguito in una vista dettagliata del visualizzatore di registri dell'applicazione.

Sono fondamentalmente alla ricerca di un comportamento simile alla destrutturazione dell'oggetto, ma senza stampare l'oggetto piatto come parte del messaggio di registro.

risposta

12

Questo è semplice come:

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

vedo, che è abbastanza semplice. Questo metodo consente anche la destrutturazione di oggetti che hanno un tipo complesso (come una proprietà * Padre * di tipo 'Persona')? Sono più interessato ai valori delle proprietà rispetto alla rappresentazione 'ToString()'. –

+5

Assolutamente - 'Log.ForContext (" Padre ", padre, destructureObjects: true)" lo fa. –

+0

Perfetto! Esattamente quello che stavo cercando. Ho letto il manuale, ma in qualche modo devo averlo trascurato. Grazie! –

Problemi correlati