我正在使用Serilog SQL Server Sink for .NET Core 2.
我在Serilog.Logger
和Program.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与源或目标中的任何列都不匹配。
任何解决方案,提示或解决方法都将不胜感激。
答案 0 :(得分:0)
.net核心存在不可为空的附加列的问题。将您的字段设置为可空。