【问题标题】:Serilog Change Log Level on Exception异常时 Serilog 更改日志级别
【发布时间】:2019-07-08 20:42:06
【问题描述】:

如果日志包含异常,Serilog/Seq 配置是否可以更改最低日志记录级别?我的用例是 Microsoft JSON 输入格式化程序,它在调试级别记录,但如果输入格式有问题,它会抛出一个异常,该异常被捕获并在调试级别记录。无论级别如何,我都想记录任何附加异常的内容。

编辑: 需要澄清的是,在生产中,我们只在信息级别或更高级别记录我们的消息,或者如果它来自框架代码(系统和 Microsoft 命名空间)则发出警告。寻找一种无论消息级别如何都可以记录异常的方法。

【问题讨论】:

  • 不幸的是,最小级别过滤是硬连线的,所以我认为没有 - 您必须更改给定源上下文的最小级别并且确保接收器是捕获那个级别。
  • 它不会“在调试级别引发异常”。它抛出一个异常,该异常被捕获然后记录一个调试级别。从那时起,它对异常有什么作用?它会重新抛出它吗?如果是这样,您可以在那里捕获它并将其记录为异常吗?还是这些内部异常被吞没了?
  • 异常在调试级别被捕获和记录
  • 然后会发生什么?它会重新抛出吗?它是否在外部(除了日志记录之外)给出了任何类型的指示,表明出现了问题?我使用过的所有 JSON 库(如果它们在解析时遇到无法解决的问题)都会出现异常。

标签: asp.net-core serilog seq


【解决方案1】:

这在 Serilog 中是可能的,但有一些主要缺点,即,必须首先构造 所有 调试级别的事件,然后才能过滤掉不需要的事件。在大多数情况下,这可能开销太大,您最好将记录异常的事件级别更改为 Information 或更高。

但要做到这一点:

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Debug() // emit the events
    .Filter.ByIncludingOnly(le => (int)le.Level >= (int)LogEventLevel.Information ||
                                  le.Exception != null)
    .CreateLogger();

【讨论】:

  • 嗯好的,也许我会向微软提出问题,让他们更改 JSONInputFormatter 的级别。感谢您的建议,当我正在审查 API 时,这可能会暂时起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-02
相关资源
最近更新 更多