我正在使用Serilog SQL Server Sink for .NET Core 2。
我已经在Program.cs
和Startup.cs
中配置了Serilog.Logger
,如下所示:
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
,允许空值。它也是活动日志表中的FK。
这就是我记录信息的方式:
Log.Information("This has properties attached");
只要添加额外的列"UserId"
,代码就可以正常工作。UserId
列已存在于我的数据库中。
这是我可以在Visual Studio的输出窗口中看到的错误:
由于以下错误,无法将 50 个日志事件写入数据库:字典中不存在给定的键。
更新到Serilog.Sinks.MSSqlServer
nuget 包后,现在我收到以下错误,并且数据库中没有记录任何内容。
由于以下错误,无法将 1 个日志事件写入数据库:给定的列映射与源或目标中的任何列都不匹配。
任何解决方案,提示或解决方法将不胜感激。
.net core 的不可为空的附加列出现问题。将字段设置为可为空。