使用 Serilog 接收器将自定义列写入 MS SQL 服务器

Writing custom columns to MS SQL Server with Serilog sink

我正在尝试使用 Serilog.Sinks.MSSqlServer 接收器将自定义列写入日志 table。根据 documentation,我添加了 columnOptionsSection:

"columnOptionsSection": {
  "additionalColumns": [
    {
      "ColumnName": "MachineName",
      "DataType": "nvarchar",
      "DataLength": 100
    }
  ]
}

我还有 "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ] 再往下(它与 File sink 一起工作正常)。

日志已写入,但 MachineName 列为 NULL。 @AlexRiabov 当前版本的接收器没有 Microsoft.Extensions.Configuration 支持。这与有一整节专门讨论它的文档相矛盾。他还表示更新到最新的开发版本可以解决问题 - 但是,该版本会抛出异常,所以我无法使用它。

所以我的问题...

  1. 是否可以定义自定义列以与来自 appsettings.json 的 MSSqlServer 接收器一起使用?如果可以,怎么做?

  2. Serilog.Sinks.MSSqlServer sink 还在开发中吗?上一次主要发布似乎是一年多以前的事了。

5.1.3-dev-00236 对我有用

确保您添加了 Environment enrichers 库

我的应用程序设置 json:

    "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
    "WriteTo": [{
            "Name": "MSSqlServer",
            "Args": {
                "connectionString": --removed--,
                "schemaName": "dbo",
                "tableName": "Logs",
                "autoCreateSqlTable": false,
                "restrictedToMinimumLevel": "Debug",
                "batchPostingLimit": 5,
                "period": "0.00:00:02",
                "columnOptionsSection": {
                    "addStandardColumns": [ "LogEvent" ],
                    "removeStandardColumns": [ "MessageTemplate", "Properties" ],
                    "additionalColumns": [
                        {
                            "ColumnName": "UtcTimeStamp",
                            "DataType": "datetimeoffset",
                            "AllowNull": false
                        },
                        {
                            "ColumnName": "MachineName",
                            "DataType": "nvarchar",
                            "DataLength": 128,
                            "AllowNull": false
                        }
                    ]
                }
            }
        }]