使用 MSSqlServer Serilog 接收器输出 JSON

Outputting JSON with the MSSqlServer Serilog sink

如何配置 MSSqlServer Serilog 接收器以将属性输出为 JSON 而不是 XML?我尝试将 RenderedCompactJsonFormatter 传递给 LoggerConfigurationMSSqlServerExtensions.MSSqlServer()formatProvider 参数,但这需要 IFormatProvider.

您可以改用 LogEvent 列并将 Properties 对象从该列值的 JSON 中拉出。

var colOpts = new ColumnOptions();
colOpts.Store.Add(StandardColumn.LogEvent);
colOpts.Store.Remove(StandardColumn.Properties);
var log = new LoggerConfiguration()
              .WriteTo.MSSqlServer(connString, "Logs",columnOptions:colOpts)
              .CreateLogger();

注意,我还删除了“属性”列,以免 table 中的数据重复。

通过配置为 Serilog.Sink.MSSqlServer 使用 WriteTo Args 来完成。

"Args": {
    "tableName": "TestMvcClient",
    "schemaName": "dbo",
    "autoCreateSqlTable": true,
    "columnOptionsSection": {
        "addStandardColumns": [ "LogEvent" ], /* Use JSON Column LogEvent */
        "removeStandardColumns": [ "Properties" ], /* Remove XML Column Properties */
    }
}

您可以在 Serilog 源中找到它和 20 多个其他设置。
https://github.com/serilog/serilog-sinks-mssqlserver#custom-property-columns