【问题标题】:Using SLF4J, is it possible to act on errors/warnings?使用 SLF4J,是否可以对错误/警告采取行动?
【发布时间】:2016-08-11 13:23:30
【问题描述】:

我有一个 java OSGi 服务器应用程序,如果发生/发生错误或警告,我想中止启动过程。

如果某些警告不应该中止进程,我可以将记录器设置为error

<logger name="LOGGER"><level value="error"/></logger>

也许有一个监听器或 API 来扫描现有的日志条目?

我想我可以实现自己的appender,但也许有更简单/更清洁的方法?

【问题讨论】:

  • SLF4J 是日志框架的外观,它不是为在发生(特定类型的)错误时修改程序的行为而设计的。不要尝试用 appender 做类似的事情,你最终会得到一个丑陋而奇怪的解决方案。只需在应用程序本身的代码中添加适当的错误处理即可。
  • 好吧有道理,只是觉得这将是一个很好的联系方式。由于第三方 OSGi 包可能会抛出我无法处理的错误/警告。
  • 要处理来自这些第三方捆绑包的错误,您可以创建自己的捆绑包,它依赖于第三方捆绑包并检查第三方捆绑包是否已启动或至少处于某个状态您的应用程序可以使用它们的位置。

标签: java logging logback slf4j


【解决方案1】:

由于您使用的是 Logback,因此您可以实现 TurboFilter 来分析所有日志事件并在发出特定级别的消息时执行您想要的任何操作。您可以在docs on TurboFilters中找到详细信息。

【讨论】:

  • 有没有办法在某个时候删除或停止过滤器(例如在服务器启动后)? stop() 不起作用。
  • stop() 仅在它被调用的特定过滤器实现时才有效。但据我所知,过滤器无法完全删除。在您的实现中,您可以简单地拥有一个布尔易失性标志active,并将其更改为start() / stop() 上的true / false。如果是false,只需从decide() 返回ACCEPT,否则请检查事件。
猜你喜欢
  • 2020-12-11
  • 2011-07-22
  • 2021-02-02
  • 2021-10-11
  • 1970-01-01
  • 2012-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多