Serilog 不会生成有效的 json(结构化日志记录)

时间:2021-07-27 08:22:38

标签: c# json asp.net-mvc asp.net-core serilog

我正在开发一个使用 asp.net core 和 Serilog 进行日志记录的应用程序。
我有以下代码:

Log.Information("Application Starting.");
Log.Information("Message: fetching all Requests");

我的 Serilog 配置文件如下所示:

{
  "Serilog": {
    "Using": [ "Serilog.Settings.Configuration" ],
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "System": "Warning",
        "Microsoft": "Warning"
      }
    },
      {
        "Name": "Logger",
        "Args": {
          "configureLogger": {
            "Filter": [
              {
                "Name": "ByIncludingOnly",
                "Args": {

                }
              }
            ],
            "WriteTo": [
              {
                "Name": "File",
                "Args": {
                  "path": "..\\Logs\structuredLog.json",
                  "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog",
                  "fileSizeLimitBytes": 20485760
                }
              }
            ],
            "Enrich": [
              "FromLogContext",
              "WithMachineName",
              "WithProcessId",
              "WithThreadId"
            ],
            "Properties": {
              "ApplicationName": "Serilog.WebApplication"
            }
          }
        }
      }
    ]
  }

问题: 作为输出,我得到一个无效的 JSON 文件:

{"Timestamp":"2021-07-27T10:09:41.9531148+02:00","Level":"Information","MessageTemplate":"Application Starting."}
{"Timestamp":"2021-07-27T10:09:46.7538684+02:00","Level":"Information","MessageTemplate":"Message: fetching all Requests"}

我希望得到这样的结果:

[
   {
      "Timestamp":"2021-07-27T10:09:41.9531148+02:00",
      "Level":"Information",
      "MessageTemplate":"Application Starting."
   },
   {
      "Timestamp":"2021-07-27T10:09:46.7538684+02:00",
      "Level":"Information",
      "MessageTemplate":"Message: fetching all Requests"
   }
]

谁能帮我解决这个问题!

2 个答案:

答案 0 :(得分:1)

关于 JSON 文件不是有效的 JSON 对象的说法是正确的。在日志库的上下文中,输出不应被视为文件,而是数据流。因此,每个日志条目都是可能永无止境的流中的一项。

这也是为什么在每行后添加一个开始数组指示符并添加逗号是没有意义的。

答案 1 :(得分:0)

我生成json日志后,可以使用vs自带的格式来调整格式

格式快捷方式:Ctrl+KCtrl+D

如果不行,就这样做:

enter image description here

结果:

enter image description here