【问题标题】:Serilog not surfacing my custom context propertiesSerilog 没有显示我的自定义上下文属性
【发布时间】:2019-03-12 15:58:32
【问题描述】:

我将 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: &lt;currentUser&gt; 显示?

【问题讨论】:

  • 您好,我正在使用带有 webaip 的 serilog。对于每条消息,我想在每条错误消息中添加用户名和类名。我是 serilog public partial class Repo 的新手:BaseRepo { public Repo(ILogger logger) : base(logger) { 不工作 // Logger.ForContext("UserId", currentuser).ForContext(); }
  • Not Working 是什么意思?你有什么错误吗?
  • 我的意思是当我写 Logger.error("Error message").I can't see username (currentuser).
  • 您需要将{Properties}添加到LoggerConfiguration中配置的格式化字符串中
  • 我已经使用 PushProperty 添加属性。 LogContext.PushProperty("用户名", currentuser);注意:下面没有 using 语句。如果我不使用 using 语句 public partial class Repo : BaseRepo { public Repo(ILogger logger) : base(logger) { LogContext.PushProperty("User Name", currentuser);注意:下面没有 using 语句 using (LogContext.PushProperty("A", 2)) }

标签: c# serilog


【解决方案1】:

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

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();

同样,如果您想显示通过GlobalLogContext 添加的自定义属性,那么您也需要Enrich.FromGlobalLogContext()

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

【讨论】:

    猜你喜欢
    • 2015-09-04
    • 1970-01-01
    • 2015-03-09
    • 2021-02-12
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多