如何以非常具体的方式格式化 Serilog JSON 输出

How to format Serilog JSON output in a very specific manner

我需要将 Serilog json 输出格式化为特定格式的文件。我弄乱了输出模板,但我一定是遗漏了一些简单的东西。输出示例为:

{ 
    "event.action": "Save",
    "custom.vulnerability": "Save PII",
    "event.action":"Insert",
    "event.module":"Person",
    "message":"Inserted person object by Bob",
    "event.outcome":"Success",
    "host.ip":"192.168.0.0",
    etc...
}

有人对如何实现这种格式有什么建议吗?我有 enrichers 来填充其中的许多属性,但生成所需的输出格式是我的问题。谢谢,东塔

为了控制 JSON 输出的格式,您需要实现自定义 ITextFormatter(您可以在其中决定如何格式化 JSON),并提供它发送日志的接收器。

Log.Logger = new LoggerConfiguration()
  .WriteTo.File(new YourCustomJsonFormatter(), "./logs/myapp.json")
  .CreateLogger();

您可以在 Serilog.Formatting.Compact 的源代码中查看自定义 ITextFormatter 的示例实现。