Problem
在log4j 1.x時代,我們曾使用FileWatchdog去偵測log4j configuration發生改變時,能透過以下程式碼重新載入log設定,以讓我們能夠在系統runtime時debug:
LogManager.getLoggerRepository().resetConfiguration(); new PropertyConfigurator().doConfigure(filename, LogManager.getLoggerRepository());
log4j後,FileWatchdog不復存在,取而代之的是ConfigurationFileWatcher,這部分不在本篇文章涉略範圍;本篇文章要分享的是: 如何重新載入Log4j的設定檔。詳細程式碼可參考此連結。
How to?
方法其實相當簡單,直接透過LoggerContext的setConfigLocation即會重新載入設定檔:
@Test public void Should_SystemOutToConsole_When_LoadNewConfigFileForTestLogger2() { LoggerContext context = (org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false); File file = new File(TEST_LOG_FILE); context.setConfigLocation(file.toURI()); TestLogger2.debug("test debug"); assertEquals(1, captor.getStandardOutput().size()); assertTrue(captor.getStandardOutput().get(0).contains("test debug")); }
透過Configurator.reconfigure也可以達成相同目標,但要記得Configurator並非位於public api中,可能會有後續維護問題要考慮。
留言
張貼留言