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

时间:2019-06-10 17:33:02

标签: c# sql-server .net-core serilog

我正在尝试使用Serilog.Sinks.MSSqlServer接收器将自定义列写入日志表。对于documentation,我添加了一个columnOptionsSection

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

而且我还有"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ]向下移动(并且它与File接收器配合正常)。

已写入日志,但是MachineName列为NULL。 @AlexRiabov states没有当前版本的接收器不支持Microsoft.Extensions.Configuration。这与整个章节都专用的文档相矛盾。他还指出,更新到最新的开发人员版本可以解决此问题-但是,该版本会引发异常,因此我无法使用它。

所以我的问题...

  1. 是否可以从appsettings.json定义自定义列以与MSSqlServer接收器一起使用?如果是这样,怎么办?

  2. Serilog.Sinks.MSSqlServer水槽是否仍在工作?上一个主要版本似乎已经超过一年了。

1 个答案:

答案 0 :(得分:1)

5.1.3-dev-00236为我工作

确保您已经添加了Environmentrichers库

我的appSettings 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
                        }
                    ]
                }
            }
        }]