Java 使用SLF4J,是否可以对错误/警告采取行动?
我有一个java OSGi服务器应用程序,如果发生错误或警告,我想中止启动过程 如果某些警告不应中止该过程,我可以将记录器设置为Java 使用SLF4J,是否可以对错误/警告采取行动?,java,logging,logback,slf4j,Java,Logging,Logback,Slf4j,我有一个java OSGi服务器应用程序,如果发生错误或警告,我想中止启动过程 如果某些警告不应中止该过程,我可以将记录器设置为错误: <logger name="LOGGER"><level value="error"/></logger> 可能有一个侦听器或API来扫描现有的日志条目 我想我可以实现我自己的appender,但也许有一种更简单/更干净的方法?因为您使用了Logback,所以可以实现一个涡轮过滤器,它分析所有日志事件,并在发出特定级别的
错误
:
<logger name="LOGGER"><level value="error"/></logger>
可能有一个侦听器或API来扫描现有的日志条目
我想我可以实现我自己的
appender
,但也许有一种更简单/更干净的方法?因为您使用了Logback,所以可以实现一个涡轮过滤器
,它分析所有日志事件,并在发出特定级别的消息时执行任何您想要的操作。您可以在中找到详细信息。SLF4J是日志框架的门面,它不是为在(特定类型的)错误发生时修改程序行为而设计的。不要试图用appender做那样的事情,你会得到一个丑陋而奇怪的解决方案。只要在应用程序本身的代码中添加适当的错误处理就行了。好吧,我觉得这是一个很好的地方。因为第三方OSGi捆绑包可能会抛出我无法处理的错误/警告。要处理来自这些第三方捆绑包的错误,您可以创建自己的捆绑包,该捆绑包依赖于第三方捆绑包,并检查第三方捆绑包是否已启动或至少处于可供应用程序使用的状态。是否有方法在某个点(例如,服务器启动后)删除或停止筛选器?stop()不起作用。stop()
仅当它由调用它的特定筛选器实现时才起作用。但据我所知,过滤器无法完全拆除。在您的实现中,您只需在start()
/stop()
上将布尔易失性标志active
更改为true
/false
。如果false
,只需从decision()
返回ACCEPT
,否则请检查事件。