2013-10-20 34 views
1

我不能configure Log4j2從工作目錄中的XML文件讀取配置。如何通過運行時路徑(工作目錄)XML文件而不是類路徑配置Log4j2

我試圖爲文件說,設置系統屬性:

的Log4j將檢查「log4j.configurationFile」系統屬性和, 如果設置,將嘗試使用相匹配的 ConfigurationFactory加載配置文件擴展名

與主類的靜態初始化塊,也是在main方法,相對和絕對路徑:

  • System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY, "E:/log4j2.xml");

  • System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY, "./log4j2.xml");

  • System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY, "log4j2.xml");
"log4j.configurationFile"代替 XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY並沒有什麼的,工程

也。

此配置只有在將我的類路徑添加到src目錄中時纔有效。我想通過編輯工作目錄中的XML文件來允許編譯後lightweid配置。

二手依賴關係:

回答

5

工作正常,我。

public class Runtimeconfig { 
    public static void main(String args[]) { 
     System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY, "/home/peter/config/log4j2.xml"); 
     new LoggedClass().logMe(); 
    } 
} 


public class LoggedClass { 
    static Logger logger = LogManager.getLogger(LoggedClass.class); 

    public void logMe() { 
     logger.info("I'm logged!"); 
    } 
} 

它打破當你在你所在班級的主要方法是使用位於

static Logger logger = LogManager.getLogger(Runtimeconfig.class); 

,因爲靜態字段,其中第一個初始化。

什麼也工作如下

public class Runtimeconfig { 

    static { 
     System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY, "/home/peter/config/log4j2.xml"); 
    } 

    static Logger logger = LogManager.getLogger(Runtimeconfig.class); 

    public static void main(String args[]) { 

     new LoggedClass().logMe(); 
     new Runtimeconfig().logger.info("I'm logged too"); 
    } 
} 

但你依靠靜態字段初始化執行的順序。

+0

什麼是可憐的,我知道靜態獨特性,但我使用實例初始值設定項而不是靜態初始值設定項錯誤:) –