【问题标题】:Serilog printing contextual propertySerilog 打印上下文属性
【发布时间】:2021-06-27 15:16:30
【问题描述】:

我正在使用 Serilog 并想打印一些包含上下文属性的信息消息。

例如:

var logger = Log.ForContext("FirstName", "Yosi");
logger.Information("Hello {FirstName}")

这按预期工作,但是当我将参数添加到它自己的日志消息中时,我得到了意想不到的结果。

var logger = Log.ForContext("FirstName", "Yosi");
logger.Information("Hello {FirstName} {LastName}", "Attias")

我希望结果是:

你好尤西·阿提亚斯

但我明白了:

你好 Attias {姓氏}

有解决办法吗?我错过了什么吗?或者这是一个错误?

【问题讨论】:

    标签: serilog


    【解决方案1】:

    消息模板仅根据传入日志记录方法的参数进行评估。无论程序中的任何其他配置/上下文如何,日志语句都旨在始终如一地工作。

    如果您想向日志输出添加其他属性,请将它们添加到您正在配置的任何接收器的 outputTemplate 参数中:

    Log.Logger = new LoggerConfiguration()
        .WriteTo.ColoredConsole(outputTemplate:
        "{Timestamp:HH:mm} [{Level}] ({LastName}) {Message}{NewLine}{Exception}")
        .CreateLogger();
    

    【讨论】:

    • 目前我在我的班级和我的方法中有记录器 - 我通过参数获取上下文我将上下文添加到记录器。例如:gist.github.com/yosiat/3f98e98ccc586f1ef58a2a23858dd0ee 我可以更改我的记录器的输出模板以添加“messageLogger”的 messageId 吗?
    • 嗨 Yosi - 不,输出模板是目前唯一的选择(除了自定义格式代码)。
    • 你可以,约西。只需尝试添加到模板“{Properties}” - 它会将您的所有上下文属性输出到日志。例如:“{Timestamp:u} [{Level:w3}] {Message} {NewLine}{Properties}{NewLine}{NewLine}{Exception}”
    【解决方案2】:

    使用反射自动添加属性及其值,以将它们全部记录在 Serilog 中:

    public static Task GenericLog(MyClassLog myclassLog, string message=null)
    {
        if (string.IsNullOrEmpty(message)) message = nameof(myclassLog);
        
        var properties = typeof(MyClassLog).GetProperties();
    
        var propertyEnrichers = new PropertyEnricher[properties.Length];
    
        for (int i = 0; i < properties.Length; i++)
            propertyEnrichers[i] =
                new PropertyEnricher(
                    properties[i].Name,
                    properties[i].GetValue(myclassLog)
                    );
    
        var withProps = Log.ForContext(propertyEnrichers);
    
        withProps.Debug(message);
    
        return Task.CompletedTask;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-21
      • 1970-01-01
      • 2020-09-30
      • 1970-01-01
      相关资源
      最近更新 更多