Serilog ms-sql接收器未写入我的表



Log.Information("Hello");未写入表。我在自述文件中使用了这里的基本配置,接收器在第一次运行时创建了我的表OK。我确信我的用户具有读/写权限。

我期望Log.Information("Hello");向表中添加一行。

Serilog.Debugging.SelfLog.Enable(msg => Debug.WriteLine(msg));
var logDB = @"data source=xxxxxxSQLEXPRESS;initial catalog=Eng;integrated security=False;persist security info=True;user id=xxxx;password=xxxxxxxx";
var sinkOpts = new SinkOptions();
sinkOpts.TableName = "SL24AddInLogging";
sinkOpts.AutoCreateSqlTable = true;
var columnOpts = new ColumnOptions();
columnOpts.Store.Remove(StandardColumn.Properties);
columnOpts.Store.Add(StandardColumn.LogEvent);
columnOpts.LogEvent.DataLength = 2048;
columnOpts.PrimaryKey = columnOpts.TimeStamp;
columnOpts.TimeStamp.NonClusteredIndex = true;
var log = new LoggerConfiguration()
.WriteTo.MSSqlServer(
connectionString: logDB,
sinkOptions: sinkOpts,
columnOptions: columnOpts
).CreateLogger();

我一定做错了什么。什么

您可以做很多事情来解决Serilog中的问题。StackOverflow上的答案中列出了几个:

Serilog MSSQL接收器不将日志写入数据库

我发现了我的问题。在过去,当我使用Serilog时,我使用了静态的"Log.Information((",而不是在创建记录器时在代码中声明的变量。在这种情况下,我声明的变量也是"log"-小写。

Log.Information((-错误。

log.Information((-很好。

编辑此外,如果遇到这种情况。我使用了静态版本,在整个项目中都可以使用我的日志记录。要定义记录器并使其可用,您可以使用以下模式:

var log = new LoggerConfiguration()
.WriteTo.MSSqlServer(
connectionString: logDB,
sinkOptions: sinkOpts,
columnOptions: columnOpts
).CreateLogger();
Log.Logger = log;

最新更新