2016-10-03 51 views
-1

我有一个场景,我想要使用标准log4j.properties文件作为属性的基础来初始化多个log4j记录器以写入其自己的文件。然后我想修改我的代码中的属性来设置记录器。在代码中,我已经设置我的记录器像这样:加载log4j属性文件并进行编程式更改

PropertyConfigurator.configure(log4jpropertiespath); 

但我需要能够设置文件附加器和类似下面的一些性质。特别需要设置Additivity以确保记录器实例保留自己的日志信息,而不管创建了多少包和记录器被初始化。

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

任何指导表示赞赏。

回答

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; 
} 
东西做到这一点

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

+0

我最终改变了实现使用更简单的日志系统。感谢您的建议。 – user3190153