在我的应用程序中,我将log4j.properites定义如下
log4j.appender.email=org.apache.log4j.net.SMTPAppender
log4j.appender.email.Subject=email Notification
稍后在程序中我动态地将主题更改为
Properties prop = new Properties();
prop.setProperty("log4j.appender.email.Subject", "Test Completed");
使用此变量后,我想将其重置为原始文件。所以我这样做了
LogManager.resetConfiguration();
PropertyConfigurator.configure(prop);
但是,稍后在代码中,每当我使用此主题属性时,它将其值赋予“Test Completed”。任何重置配置的建议都非常感谢。感谢
答案 0 :(得分:5)
正如我上面的评论所述
LogManager.resetConfiguration();
PropertyConfigurator.configure(prop);
不要重新配置现有的Logger实例,以便他们仍然使用旧的EmailAppender。为了使更改生效,您应该重新创建记录器。 如果不可能(例如,你的记录器是静态的最终字段),你可以创建一个简单的Logger包装器,它将自己注册一些监听器,它将通知配置更改,以便包装器可以创建新的记录器实例
答案 1 :(得分:0)
这是部分答案(我知道);但是您可以在没有明确LogManager.resetConfiguration();
重置层次结构
当属性文件中存在log4j.reset = true时,将在配置之前重置层次结构。
https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PropertyConfigurator.html