2010-01-19 42 views
2

我希望我的Restlet應用程序爲任何生成500系列HTTP錯誤的資源(使用上下文的記錄器)記錄堆棧跟蹤。據我所知,這不是默認行爲。Restlet:爲所有500個錯誤記錄堆棧跟蹤

換句話說,我不希望我的Resource類在代表和acceptRepresentation方法中有任何記錄器代碼 - 它們只是拋出一個ResourceException。我希望在所有Resource實例中集中處理日誌邏輯。

我可以想到一些這樣做的方法(例如,從處理日誌邏輯的Resource子類繼承),但它看起來像是應該內置到框架中的東西。

我錯過了什麼?

+0

注意你正在使用哪個版本的Restlet會很有幫助。 – 2010-01-19 14:05:10

回答

3

StatusService看看:

服務來處理錯誤狀態。如果您的應用程序或Restlet代碼中引發了異常,則該服務會在啓用它時被截取。當捕獲異常或錯誤時,首先調用getStatus(Throwable,Request,Response)方法來獲取您想要在響應中設置的狀態。 [...]

我剛剛在上個月發現了這個,它允許我真正壓縮了很多錯誤處理代碼,並且確保正在處理異常並被統一處理。

+0

@Jim - 非常感謝,這就是我一直在尋找的。儘管如此,看起來StatusService並沒有捕捉到你自己拋出的500狀態的ResourceException。這可能是我出錯的地方。 – 2010-01-19 02:19:21

+0

Rich,我創建了RuntimeException的一個子類,並從一堆地方拋出它。我還創建了StatusService的一個子類,它抓住了我想要處理的子類。這一切都爲我工作。 (不太確定這是否和你一樣。) – 2010-01-24 07:55:16

1

您可能可以使用過濾器來執行此操作;在afterHandle()中它可以檢查狀態碼,然後嘗試記錄異常。我不確定是否有例外可用於過濾器。