2013-10-20 68 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

什么是可怜的,我知道静态独特性,但我使用实例初始值设定项而不是静态初始值设定项错误:) –