Serilog Net Core附加列问题

时间:2018-02-28 13:23:02

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

我正在使用Serilog SQL Server Sink for .NET Core 2.

我在Serilog.LoggerProgram.cs中都配置了Startup.cs,如下所示:

ColumnOptions columnOptions = new ColumnOptions();

columnOptions.AdditionalDataColumns = new System.Collections.Generic.List<DataColumn>();
columnOptions.AdditionalDataColumns.Add(new DataColumn() { ColumnName = "UserId", DataType = typeof(string) });            
Log.Logger = new LoggerConfiguration()               
   .WriteTo.MSSqlServer("Data Source=TS-ABC\\SQLExpress;Initial Catalog=XYZ;Integrated Security=True",
    "ActivityLogs", columnOptions: columnOptions, autoCreateSqlTable: false, restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Debug)
.CreateLogger();

Sstartup.cs

services.AddSingleton<Serilog.ILogger>(x =>
{
    ColumnOptions columnOptions = new ColumnOptions();

    columnOptions.AdditionalDataColumns = new System.Collections.Generic.List<DataColumn>();                
    columnOptions.AdditionalDataColumns.Add(new DataColumn() { ColumnName = "UserId", DataType = typeof(string) });

    return new LoggerConfiguration().WriteTo.MSSqlServer(Configuration["Data:DefaultConnection:ConnectionString"], Configuration["Serilog:TableName"], autoCreateSqlTable: false, columnOptions: columnOptions, restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Debug).CreateLogger();
});

UserId的类型为string,并允许空值。它也是ActivityLogs表中的FK。

这就是我记录信息的方式:

Log.Information("This has properties attached");

只要添加了附加列"UserId",代码就可以正常工作。 UserId列已存在于我的数据库中。

以下是我在Visual Studio的输出窗口中可以看到的错误:

  

由于以下错误,无法将50个日志事件写入数据库:字典中没有给定的密钥。

现在更新到Serilog.Sinks.MSSqlServer nuget包后,我收到以下错误,并且没有任何内容记录在数据库中。

  

由于以下错误,无法将1个日志事件写入数据库:给定的ColumnMapping与源或目标中的任何列都不匹配。

任何解决方案,提示或解决方法都将不胜感激。

1 个答案:

答案 0 :(得分:0)

.net核心存在不可为空的附加列的问题。将您的字段设置为可空。