Add custom properties to Serilog

寵の児 提交于 2019-12-21 03:45:09

问题


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.


回答1:


This is as simple as:

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



回答2:


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.



来源:https://stackoverflow.com/questions/27888715/add-custom-properties-to-serilog

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!