2011-10-11 122 views
0

我的應用程序中有五個不同的log4j屬性文件用於每個事件。我不希望應用程序使用DOM或PropertyConfigurator加載文件。但是我想將所有這些屬性加載到一個Map中,事件名稱爲鍵,屬性或Logger作爲值。因此,當我使用事件名稱調用getLogger方法時,將返回基於事件名稱的相應記錄器對象。LOG4J加載多個log4j文件

本文中的實現在一定程度上對我有所幫助。 log4j log file names? 它們根據作業動態創建記錄器對象。但我想爲每個事件使用靜態log4j文件並加載它並將其還原。

我也檢查了這篇文章的回覆。 multiple log4j instance configuration 但是,由於每個事件的事件名稱和appender列表在我的應用程序中將是一個巨大的數字,爲了更好的可維護性目的,我爲每個事件選擇一個log4j文件。

期待您的幫助。 謝謝, 拉迪卡

+0

log4j確實不是爲多個配置文件設計的。我建議你使用一個配置文件和多個記錄器,每個事件一個。這將最大限度地減少您的長期維護,因爲您不必維護定製版本的log4j或使用不屬於公共API的類和方法。 –

回答

0

我有每個事件定義的log4j文件。 傳遞事件名稱並使用屬性配置器在上下文中加載特定於事件的log4j屬性文件。 getLogger方法將擁有該記錄器。

private static synchronized Logger getEventLogger(String eventName) { 
Logger logger = null; 
    try { 

     logger = m_loggers.get(eventName); 
     if (logger == null) { 
      PropertyConfigurator.configure(eventName + ".properties"); 
      logger = Logger.getLogger(eventName); 
      m_loggers.put(eventName, logger); 

     } 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return logger; 
} 
+0

我懷疑這是否可以工作。 Log4J在類加載器級初始化,並且'PropertyConfigurator.configure'的連續調用可能不會完全擺脫先前在同一線程上完成的配置。 – Isaac