【问题标题】:Serilog Net Core Additional Columns IssueSerilog Net Core 附加列问题
【发布时间】:2018-08-08 09:30:36
【问题描述】:

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

我在Program.csStartup.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();
});

UserIdstring 类型,允许空值。它也是 ActivityLogs 表中的 FK。

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

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

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

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

由于以下错误,无法将 50 个日志事件写入数据库:字典中不存在给定的键。

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

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

我们将不胜感激任何解决方案、提示或解决方法。

【问题讨论】:

  • “只要添加了附加列“UserId”,代码就可以正常工作。UserId 列已经存在于我的数据库中。” - 那么问题出在哪里?跨度>
  • @stuartd,我已经更新了问题。
  • 您的问题帮助我解决了我遇到的问题。我使用的是 Serilog.Sinks.MSSQLServerCore,因为我的印象是 Serilog.Sinks.MSSqlServer 与 .Net Core 不兼容。谢谢。
  • 我正在使用 Serilog.Settings.Configuration v2.5.0 和 Serilog.AspNetCore v2.1.0。你用的是同一个版本吗?

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2020-06-29
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 2019-04-26
    • 2021-08-12
    相关资源
    最近更新 更多