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

How can I include both "Message" and "MessageTemplate" in the Serilog JsonFormatter output?

我正在使用 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 格式化程序:

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

如有任何帮助,我们将不胜感激

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

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")