Serilog SelfLog没有输出任何内容

9
我正在解决一个问题,即 MSSqlServer sink 没有将任何内容写入我的数据库表中。有人建议我连接 SelfLog 来查看发生了什么,但它实际上没有输出任何内容,而且我不确定是否漏掉了什么。这是设置方法:
public SerilogLogger()
{
    Serilog.Debugging.SelfLog.Enable(
        msg => System.Diagnostics.Trace.WriteLine(msg));

    _logger = new LoggerConfiguration()
        .WriteTo.MSSqlServer(@"Server=<MyConnectionString>", "Logs")
        .WriteTo.Trace()
        .CreateLogger();
}

这个类中的方法只是在_logger上调用日志方法,它在这里被设置。我创建的日志通过trace sink写入输出窗口,但什么也没有输出到数据库中,Serilog也没有输出任何内容,更不用说任何错误了。我甚至尝试故意搞乱连接字符串,以便让它输出任何东西,但都没有成功。有什么想法吗?

1
我想知道日志记录级别是否过高。尝试将最小日志记录级别设置为详细信息(.MinimumLevel.Verbose())。 - PatrickSteele
@Sinaesthetic,你找到答案了吗? - netaholic
@netaholic 抱歉,我不认为我曾经这样做过。最终,我只是切换到了Loggly而没有遇到太多问题,放弃了MSSql作为接收器。 - Sinaesthetic
1
在我的情况下,问题是参数的数量与传递到日志方法中的对象数量不匹配。 另一个问题是Serilog.Debugging.SelfLog.Enable没有在错误后立即触发,我的控制台应用程序在命中断点之前就关闭了。 - netaholic
@patricksteele 我相信那可能就是问题所在。日志级别默认为信息(Information),我想大多数东西当时都是调试(debug)级别的。我再次遇到了同样的问题,大多数东西都设置为冗长(verbose),但似乎存在一种层次结构,其中记录器与汇流处分别配置,因此我将汇流处配置为冗长,但记录器仍然是信息级别,因此没有详细或调试日志传递到汇流处。 - Sinaesthetic
1个回答

7

我知道这是一个相当老的问题,但我花了几天时间处理一个类似的问题,所以我在这里留下一些建议。

  1. 如果你正在使用全局的Log对象,请确保你实际上发送了日志。Serilog会将请求排队并在执行以下操作时将它们全部发送:

    Log.CloseAndFlush();

    没有这个,就什么也不会被记录。请确保在最后执行此操作,因为在此之后,记录器将被关闭 (Serilog的生命周期文档)。

    如果你没有使用全局对象,则应该在释放日志对象时执行此操作。

  2. 尝试查看Serilog是否正在显示错误,可以通过强制出现一个错误来检测。只需删除连接字符串中的一个字符或类似操作,以查看Serilog的异常是否出现在控制台中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接