【问题标题】:How to configure Log4j2 by runtime-path (working directory) XML file, not classpath如何通过运行时路径(工作目录)XML文件配置Log4j2,而不是类路径
【发布时间】:2013-10-20 11:45:10
【问题描述】:

我无法configure 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 目录中)时才有效。我想通过编辑工作目录中的 XML 文件来允许编译后的 lightweid 配置。

使用的依赖项:

【问题讨论】:

    标签: java logging log4j slf4j log4j2


    【解决方案1】:

    对我来说很好。

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

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

    【讨论】:

    • 真可惜,我知道静态优先级,但我错误地使用了实例初始化程序而不是静态初始化程序:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 2021-08-27
    相关资源
    最近更新 更多