2013-05-09 45 views
2

更改日誌級別我有一個應用程序運行在tomcat6 servlet容器中使用slf4j與log4j儘管切換到logback即將到來。我怎樣才能動態,在每個線程的基礎上,使用slf4j/logback

該應用程序大量使用hibernate,並且暫時我們需要打開hibernate SQL日誌記錄。

但是,有一條代碼路徑使TONS的重複(和無聊)調用進入休眠狀態併產生日誌記錄。

我希望能夠更改特定記錄器的日誌級別,但只有當前正在執行的線程纔會發生這種情況。

我已經閱讀了關於MDC的內容,但似乎只能用於在每個線程的基礎上添加額外的「標籤」,但不能更改特定記錄器的實際記錄級別。

這是可行的嗎?

回答

3

也許你可以實現一個filter,它忽略來自該特定線程的事件。正如您所說的,您可能可以使用MDC識別源代碼線程。

+0

像一個魅力工作。 – dmansfield 2013-05-09 21:12:18

+0

很高興幫助:-) – dratewka 2013-05-09 22:02:53

1

您可以創建基於這兩個類名和線程名SLF4J記錄器:

logger = LoggerFactory.getLogger(getClass().getName() + "." + Thread.currentThread().getName()); 

然後用不同的logback配置爲不同的線程。 您還可以在ThreadLocal變量中緩存記錄器實例,以最大限度地降低性能影響。

+0

這將適用於我的代碼,但不適用於已經創建記錄器實例但已經執行的代碼,如hibernate。 – dmansfield 2013-05-10 11:26:58