【问题标题】:How can I include both "Message" and "MessageTemplate" in the Serilog JsonFormatter output?如何在 Serilog JsonFormatter 输出中同时包含“Message”和“MessageTemplate”?
【发布时间】:2021-03-12 11:11:05
【问题描述】:

我使用的是 Serlog 2.10, 写入控制台(作为人类可读的文本), 和 RollingFile - 使用 JsonFormatter。

我希望在输出 JSON 中同时包含:“Message”和“MessageTemplate”节点,

但是,我只收到“Message”或“MessageTemplate”,而不是两者。

这是它的配置方式:

Log.Logger = new LoggerConfiguration()
                .MinimumLevel.Information()
                .WriteTo.Console()
                .WriteTo.RollingFile(new JsonFormatter(), "logs/log-{Date}.log")
                .CreateLogger();

我按照此页面上的说明进行操作: https://github.com/serilog/serilog-formatting-compact

我已经尝试了所有 3 个 Json 格式化程序:

  • “RenderedCompactJsonFormatter” - 将“@m”(消息)放入输出中
  • “CompactJsonFormatter” - 将“@mt”(MessageTemplate)放入输出中
  • “JsonFormatter” - 将“MessageTemplate”放入输出中

如何将它们都包含在输出中?

任何帮助将不胜感激

【问题讨论】:

    标签: c# .net logging serilog


    【解决方案1】:

    Serilog.Expressions 可以这样做:

      .WriteTo.RollingFile(
        new ExpressionTemplate(
          "{ {Timestamp: @t, Level: @l, MessageTemplate: @mt, Message: @m, Exception: @x, " +
          "Properties: if IsDefined(@p[?]) then @p else undefined()} }" + Environment.NewLine,
          "logs/log-{Date}.log")
    

    【讨论】:

      【解决方案2】:

      一种方法是编写自己的格式化程序。从例如开始JsonFormatter 并且只使用那些对您的要求有效的部分。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-24
        • 2014-09-06
        • 1970-01-01
        • 2019-07-21
        • 1970-01-01
        相关资源
        最近更新 更多