覆盖log4j配置编程:对于FileAppender文件位置(override log4j conf

2019-07-18 00:39发布

是它可以覆盖已在被配置的附加器的“文件”属性log4j.properties而无需创建一个新的appender? 如果是的话 - 如何?

情况是这样的:我有两个apenders,A1是一个是ConsoleAppender和A2是一个FileAppender。 A2的“文件”指出通用error.log中:

log4j.appender.A2.File=error.csv

该附加器只记录错误级别的事件或更差通过

log4j.appender.A2.Threshold=error

现在,我想在这取决于不同的文件放在哪个类造成的错误,因为有正在创建的实例几类被写入这些错误。 能够看到哪一类创建错误(或多个)快速会有很大的帮助,因为它是一个很大的帮助的,然后通过error.log中寻找类标签略读。

所以我的想法是覆盖“文件”属性例如,在这些新创建的类的构造函数,所以他们登陆在不同的文件中的错误。

非常感谢提前!

Answer 1:

有关运行时访问此链接改变log4j属性

http://alperkaratepe.wordpress.com/2010/01/16/how-to-change-log4j-properties-at-runtime/

 private void updateLog4jConfiguration(String logFile) { 
    Properties props = new Properties(); 
    try { 
        InputStream configStream = getClass().getResourceAsStream( "/log4j.properties"); 
        props.load(configStream); 
        configStream.close(); 
    } catch (IOException e) { 
        System.out.println("Error: Cannot laod configuration file "); 
    } 
    props.setProperty("log4j.appender.FILE.file", logFile); 
    PropertyConfigurator.configure(props); 
 }


Answer 2:

老问题(在谷歌很好的索引)。 除了OP的要求,增加额外的方法iv'e阅读操纵log4j.properties


修改加载log4j.properties在运行时

private void updateLog4jConfiguration(String logFile) { 
    Properties props = new Properties(); 
    try { 
        InputStream configStream = getClass().getResourceAsStream( "/log4j.properties"); 
        props.load(configStream); 
        configStream.close(); 
    } catch (IOException e) { 
        System.out.println("Errornot laod configuration file "); 
    } 
    props.setProperty("log4j.appender.FILE.file", logFile); 
    LogManager.resetConfiguration(); 
    PropertyConfigurator.configure(props); 
}
  • 完整的例子就是在这篇文章中

设置log4j.properties在运行时

可以手动完成

Properties properties = new Properties();
properties.setProperty("log4j.logger.org.hibernate", "ERROR");
// ...

LogManager.resetConfiguration();
PropertyConfigurator.configure(properties);

或通过加载不同的属性文件

Properties properties = new Properties();
properties.load(new FileInputStream("/etc/myapp/properties/custom-log4j.properties"));
LogManager.resetConfiguration();
PropertyConfigurator.configure(properties);

VM选项

你可以告诉log4j的使用加载不同的文件log4j.configuration VM选项

java -Dlog4j.configuration=file:///etc/myapp/properties/custom-log4j.properties
  • 如果您选择此选项,则必须在执行行提供


文章来源: override log4j configuration programmatically: file location for FileAppender