如何在 Serilog JsonFormatter 输出中包含“Message”和“MessageTemplate”?

Yai*_*ron 7 .net c# logging serilog

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

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

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

下面是它的配置方式:

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

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

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

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

我怎样才能将它们都包含在输出中?

任何援助将不胜感激

Nic*_*rdt 2

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")
Run Code Online (Sandbox Code Playgroud)