2010-10-15 92 views
0

我在Weblogic 10.3.3上構建了一個web服務,我正在使用一個servlet過濾器將請求記錄到數據庫。我不希望過濾器放慢對web服務的調用。所以我其實有兩個問題。Servlet過濾器和線程?

1)過濾器,或者我可以讓過濾器做一個單獨的線程日誌記錄?如果是的話如何?

2)有沒有一種方法可以動態地打開或關閉過濾器,而無需重新部署代碼。

感謝

回答

5
  1. 過濾器由分配給您的請求的線程中執行。如果您願意,您可以創建一個FutureTask來進行日誌記錄,但Filter中沒有內容可以讓您做這樣的事情。如果您使用的是Log4J,則可以登錄隊列並以這種方式卸載應用程序。
  2. 過濾器被添加到web.xml中,所以你不能關閉它們或以這種方式。如果裏面有一個JMX bean來完成這個工作,也許你可以使用JMX控制檯來關閉和打開它的功能。

您可能會在這裏犯了過早的優化。如果你記錄或過濾東西會成爲一個問題,我會等到我有證據證明它,然後纔開始重新設計來修復它。

+0

確實,配置文件!瓶頸可能實際上是一個未被混合的數據庫連接。至於第2點,另一個選項是運行時檢查classpath中的屬性文件。但是這也可能會放緩事情。基本上每行代碼都是如此。 – BalusC 2010-10-15 17:41:23

0

許多日誌記錄軟件都支持「異步日誌記錄」,其中日誌事件非常快速地放入隊列中,然後單獨的線程儘快將其寫入永久存儲器。這裏的缺點是,如果您的應用在事件仍然在隊列中時崩潰,則更有可能丟失消息。總體開銷也稍高,因爲你有多個線程相互協調。

此外,許多日誌記錄框架都有一個「監視配置」選項,可以定期檢查配置文件。這使您可以在「熱」系統上啓用或禁用記錄器。

你正在使用什麼日誌庫?