2016-08-11 32 views
2

我有一个java OSGi服务器应用程序,并希望中止引导过程,如果发生错误或警告/发生。使用SLF4J,是否可以对错误/警告采取行动?

如果一些警告不应中止过程中,我可以在记录器设置为error

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

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

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

+2

SLF4J是日志框架的一个外观,它不是用来修改程序在发生某种(特定种类)错误时的行为。不要试图用appender做这样的事情,你会得到一个丑陋和奇怪的解决方案。只需将适当的错误处理添加到应用程序本身的代码即可。 – Jesper

+0

好的是有道理的,只是认为这将是一个很好的地方。由于第三方OSGi软件包可能会抛出我无法处理的错误/警告。 –

+0

要处理来自这些第三方软件包的错误,您可以创建自己的软件包,该软件包取决于第三方软件包,并检查第三方软件包是否已启动或至少处于可供应用程序使用的状态。 – Jesper

回答

1

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

+0

有没有办法在某个时候删除或停止过滤器(例如在服务器启动后)? stop()不起作用。 –

+0

'stop()'只有在它被调用的特定过滤器实现时才会起作用。据我所知,滤镜不能完全移除。在你的实现中,你可以简单地在'start()'/'stop()'上设置一个布尔型volatile标志'active'并将其改为'true' /'false'。如果它是'false',只需从'decide()'返回'ACCEPT',否则就对事件进行检查。 –

相关问题