I'm using Serilog with an MS SQL Server sink in my application. Let's assume I have defined the following class ...
public class Person { public string FirstName { get; set; } public string LastName { get; set; } public DateTime BirthDate { get; set; } // ... more properties }
... and created an instance:
var person = new Person { FirstName = "John", LastName = "Doe", BirthDate = DateTime.UtcNow.AddYears(-25) };
I have placed the following log call in my code:
Log.Information("New user: {FirstName:l} {LastName:l}", person.FirstName, person.LastName);
Is it possible to also log the BirthDate
property without adding it to the message template so that it's rendered within the Properties
XML column? I'd like to output it later in a details view of my application's log viewer.
I'm basically looking for a behavior similar to the object destructuring, but without printing the flat object as part of the log message.
This is as simple as:
Log.ForContext("BirthDate", person.BirthDate) .Information("New user: {FirstName:l} {LastName:l}", person.FirstName, person.LastName);
You can actually do this in a few different ways. In your case, the first way is probably the best:
Log.ForContext("BirthDate", person.BirthDate) .Information("New user: {FirstName:l} {LastName:l}", person.FirstName, person.LastName);
But you can also use the LogContext
in other scenarios:
Log.Logger = new LoggerConfiguration() // Enrich all log entries with properties from LogContext .Enrich.FromLogContext(); using (LogContext.PushProperty("BirthDate", person.BirthDate)) { Log.Information("New user: {FirstName:l} {LastName:l}", person.FirstName, person.LastName); }
Or, in the case where you want to log a "constant" property, you can add it like this:
Log.Logger = new LoggerConfiguration() // Enrich all log entries with property .Enrich.WithProperty("Application", "My Application");
See Context and correlation – structured logging concepts in .NET (5) for more information.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With