Serilog没有显示我的自定义上下文属性

时间:2018-10-08 02:00:09

标签: c# serilog

我正在将Serilog与WebApi一起使用。我想在每个错误消息中添加一个用户名和类名。

这是我目前的代码:

public partial class Repo : BaseRepo<db>
{
    public Repo(ILogger logger) : base(logger)
    {
       /// Not working
       //  Logger.ForContext("UserId", currentuser).ForContext<Repo>();
       logger.ForContext("UserId", currentuser).Information("message")
    }

消息呈现为:

INF message

如何让userid: <currentUser>显示?

1 个答案:

答案 0 :(得分:1)

为您显示的消息取决于您所使用的接收器的output template(如果支持)。例如,如果您使用的是Console Sink,则在配置接收器时需要将{Properties:j}添加到outputTemplate参数中:

Log.Logger = new LoggerConfiguration()
    .WriteTo.Console(LogEventLevel.Debug,
        outputTemplate: "[{Level:u3}] {Message:lj} {Properties:j}{NewLine}{Exception}")
    .CreateLogger();

此外,如果您要显示将通过LogContext添加的自定义属性,则也需要Enrich.FromLogContext()

Log.Logger = new LoggerConfiguration()
    .WriteTo.Console(LogEventLevel.Debug,
        outputTemplate: "[{Level:u3}] {Message:lj} {Properties:j}{NewLine}{Exception}")
    .Enrich.FromLogContext()
    .CreateLogger();