我們目前正在使用Tomcat 7,使用-Djava.util.logging.config.file指定的單一日誌配置,以及使用-Djava.util.logging.manager =「org.apache.juli.ClassLoaderLogManager」的默認ClassLoaderLogManager。這適用於一次性啓動配置。在運行時重新加載tomcat日誌記錄?
我們有幾個servlet和其他代碼在servlet上下文之外運行。我們在我們完全控制的專用tomcat服務器上運行,並且我們希望所有代碼都使用相同的日誌配置。我們使用java.util.logging API進行日誌記錄。這意味着LogManager.getLogManager()。getLogger(name)需要工作,並且該Logger.isLoggable(Level)需要工作。
ClassLoaderLogManager似乎與我們的情況相反:允許servlet指定單獨的日誌設置。我們希望將所有日誌控制在一個地方。但是,我們做希望像改進FileHandlers的其他JULI好處。
現在的問題:我怎樣才能重新加載這些設置從運行時的文件沒有重新加載應用程序?
我已經試過什麼:
- LogManager.getLogManger.readConfiguration():結果在ClassLoaderLogManager有效NOOP因爲Thread.currentThread.getContextClassLoader()是不是系統類加載器。
- 顯式設置Thread.setContextClassLoader(ClassLoader.getSystemClassLoader()),然後調用以上。這實際上是讀取配置文件(在調試器中逐步完成的),但它並未將更改傳播到包含的ClassLoaders中的現有記錄器。 Logger.setLevel()從未在現有記錄器上調用過。
- 也調用reset()之前這些調用似乎並沒有改變任何東西。
- JMX似乎只暴露伐木者單個類加載器(可能是系統類加載器)
您是否嘗試過JMX? – 2013-02-28 17:03:36
什麼,具體與JMX? JConsole顯示了java.util.logging上暴露的內容,但它似乎只是頂級ClassLoader的一部分。例如,沒有記錄來自servlet的類。 – TREE 2013-02-28 17:28:16
JConsole ist correct,但是你可以看到[here](http://i.imgur.com/7mNwh5D.png) – 2013-02-28 17:40:24