1

我无法将 Log4j2配置为从工作目录中的 XML 文件读取配置

我试图设置系统属性,如文档所述:

Log4j 将检查“log4j.configurationFile”系统属性,如果设置,将尝试使用与文件扩展名匹配的 ConfigurationFactory 加载配置

使用 Main 类静态初始化程序块,也在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没有任何效果。

仅当我通过将 XML 添加到我的类路径中时,src此配置才有效directory。我想通过编辑工作目录中的 XML 文件来允许编译后的 lightweid 配置。

使用的依赖项:

4

1 回答 1

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);

在 main 方法所在的类中,因为静态字段首先初始化。

以下也将起作用

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");
    }
}

但是你依赖于静态字段初始化执行的顺序。

于 2013-10-20T12:53:37.543 回答