2013-04-04 38 views
0

我有一個log4j與多個記錄器,在多線程應用程序中使用appender。在一種情況下,我會嘗試連接到遠程服務。如果連接失敗,我會再次嘗試。呼叫持續時間的更改Log4j閾值

我想只有第一次log4j使用其原始配置。但對於其他後續嘗試,我想使用較少的詳細配置。這不應該改變可能在同一對象上運行的其他線程的日誌配置。請注意,我無法預先知道在呼叫中使用哪些記錄器來連接遠程服務。

那麼,有沒有辦法在一次調用期間全局更改日誌記錄,而不改變其他併發線程的行爲?

回答

0

看看這個API的這一部分:

http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Logger.html

可以調用setLevel(級別LEV)方法,並做一些改變。但是,我不能100%確定你不會像其他線程那樣影響其他線程,因爲通常記錄器是基於類的。

我認爲你將不得不爲每個用戶會話獲得一個Logger對象,但我不能100%確定它是否會導致堆問題。

也許控制你的代碼的輸出(如果它是第一次嘗試,只發送一些消息到日誌)。

Regards

+0

謝謝但setLevel確實會影響其他線程。否則,我無法訪問記錄消息的代碼。我只能對log4j配置行事。 – PeeWee2201 2013-04-05 07:31:45

+0

那麼,這將是非常困難的,因爲你將無法修改記錄器的行爲。除非別人看到一些詭計,否則我會認爲不觸摸源代碼就無法做到你想做的事。 – Martin 2013-04-05 11:58:55