C# Serilog未呈现自定义上下文属性

C# Serilog未呈现自定义上下文属性,c#,serilog,C#,Serilog,我将Serilog与WebApi一起使用。我想在每个错误消息中添加用户名和类名 以下是我的代码: public partial class Repo : BaseRepo<db> { public Repo(ILogger logger) : base(logger) { /// Not working // Logger.ForContext("UserId", currentuser).ForContext<Repo>()

我将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")
    }

如何获取要显示的
userid:

为您显示的消息取决于您正在使用的接收器的类型(如果支持)。例如,如果使用,则在配置接收器时,需要将
{Properties:j}
添加到
输出模板
参数:

Log.Logger = new LoggerConfiguration()
    .WriteTo.Console(LogEventLevel.Debug,
        outputTemplate: "[{Level:u3}] {Message:lj} {Properties:j}{NewLine}{Exception}")
    .CreateLogger();
此外,如果要显示将通过
LogContext
添加的自定义属性,则还需要
丰富.FromLogContext()

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

嗨,我正在使用serilog和webaip。对于每条消息,我想在每条错误消息中添加用户名和类名。我不熟悉serilog公共部分类Repo:BaseRepo{public Repo(ILogger logger):base(logger){Not working//logger.ForContext(“UserId”,currentuser.ForContext();}
Not working
这是什么意思?你有没有收到任何错误?我是说当我写logger.error(“错误消息”)时。我看不到用户名(currentuser)。您需要将
{Properties}
添加到
LoggerConfiguration
中配置的格式字符串中。我已使用PushProperty添加property.LogContext.PushProperty(“用户名”,currentuser);注意:不使用下面的语句。我可以知道如果不使用using语句公共部分类Repo:BaseRepo{public Repo(ILogger logger):base(logger){LogContext.PushProperty(“用户名”,currentuser);注意:不使用下面的语句使用(LogContext.PushProperty(“A”,2)),会出现什么问题吗
Log.Logger = new LoggerConfiguration()
    .WriteTo.Console(LogEventLevel.Debug,
        outputTemplate: "[{Level:u3}] {Message:lj} {Properties:j}{NewLine}{Exception}")
    .Enrich.FromLogContext()
    .CreateLogger();