【问题标题】:Serilog MS SqlServer Sink only writing 1 log levelSerilog MS SqlServer Sink 只写 1 个日志级别
【发布时间】:2017-05-31 02:39:37
【问题描述】:

我已将 Serilog 与 .NetCore 连接起来,并且正在使用 MSSQLServer 接收器。我可以使用当前设置登录到数据库,但似乎只显示了一个日志级别。

配置:

var logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.MSSqlServer(mssql.ConnectionString, mssql.TableName, autoCreateSqlTable: true)
    .CreateLogger();

记录代码:

Log.Information("Information Log");

try
{
    var numerator = 10;
    var denominator = 0;
    var num = numerator / denominator;
}
catch (Exception ex)
{
    Log.Error(ex, "Divided by Zero error");
}

即使设置了最低日志级别,默认设置也会记录信息,但不会记录错误。

如何更改此设置,以便我可以拥有一个真正的最低日志级别,以便将高于该级别的所有内容记录到数据库中

【问题讨论】:

  • 我参加聚会有点晚了,但是您尝试添加 selflog 吗? Serilog.Debugging.SelfLog.Enable(msg => { Console.WriteLine(msg); Debugger.Break(); });
  • 我认为这可能是 serilog 如何持久保存到数据库的错误,如果您还没有解决这个问题,您可能只需要更新 serilog dll

标签: c# asp.net-core serilog


【解决方案1】:

看来您使用了错误的 Logger。 .NET Core Logging 提供了应该使用的 extension methods,如 LogInformationLogError 等(ILogger.Log 的包装器):

var logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.MSSqlServer(mssql.ConnectionString, mssql.TableName, autoCreateSqlTable: true)
    .CreateLogger();

logger.LogInformation("Information Log");
...
logger.LogError(ex, "Divided by Zero error");

【讨论】:

  • 这正在控制台应用程序中进行测试。这不包含 I Logger 接口。
  • @Dblock247 实际上是CreateLogger() 方法返回ILogger。同样,根据您的示例,您使用 ASP.NET Core Logging 创建记录器实例,但随后调用了一些静态方法 Log.Information, Log.Error (maybe from System.Diagnostic.. or directly from Serilog package..) ,这不是 ASP.NET Core Logging 提供的。换句话说,您使用的是另一个记录器,而不是您配置的记录器。
  • 我未能展示的是 Log.Logger = logger.无论哪种方式,即使我使用 logger.Information("log message") 它也不起作用。现在它没有记录任何东西。而且我知道连接字符串是正确的,因为如果我有 autoCreateSqlTable: true ,它将创建数据库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-14
  • 1970-01-01
  • 1970-01-01
  • 2019-02-02
  • 2019-07-08
  • 1970-01-01
相关资源
最近更新 更多