2016-08-11 42 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',否則就對事件進行檢查。 –

相關問題