加载log4j属性文件并以编程方式更改

时间:2016-10-03 12:21:34

标签: java logging log4j

我有一个场景,我想初始化多个log4j记录器,使用标准的log4j.properties文件作为属性的基础来写入自己的文件。然后我想修改我的代码中的属性来设置记录器。在代码中,我一直在设置我的Logger:

PropertyConfigurator.configure(log4jpropertiespath);

但是我需要能够设置文件appender和一些属性,如下所示。特别想要设置Additivity以确保记录器实例保留自己的日志信息,无论创建了多少个包并初始化了记录器。

SimpleLayout layout = new SimpleLayout();
FileAppender appender = new FileAppender(layout, logFileName, true);    
this.logger.setAdditivity(false);
this.logger.addAppender(appender);

感谢任何指导。

1 个答案:

答案 0 :(得分:0)

我仍然不认为这是一个好主意(拥有任意数量的日志文件,等等),但是你可以通过包装Logger.getLogger方法来做到这一点,就像这样

public static Logger getPackageLogger(String packageName) {
    Logger logger = Logger.getLogger(packageName);
    if (logger.getAppender("myPackageAppender") == null) {
        String logFileName = packageName + ".log"; // or something
        SimpleLayout layout = new SimpleLayout();
        FileAppender appender = new FileAppender(
            layout, logFileName, true);    
        appender.setName("myPackageAppender");
        logger.setAdditivity(false);
        logger.addAppender(appender);
    }
    return logger;
}

这可以多次调用,并且应该只配置一次每个不同的(包)记录器对象。