log4j将属性重置为原始文件,如log4j.properties文件中所示

在我的应用程序中,我定义了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”。 任何重置配置的建议都非常感谢。 谢谢

正如我上面的评论所述

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

不要重新配置现有的Logger实例,以便它们仍然使用旧的EmailAppender。 为了使更改生效,您应该重新创建记录器。 如果不可能(例如你的记录器是静态的最终字段),你可以创建一个简单的Logger包装器,它将自己注册一些监听器,它将通知配置更改,以便包装器可以创建新的记录器实例

这是部分答案(我知道); 但是你可以在没有显式LogManager.resetConfiguration();情况下进行重置LogManager.resetConfiguration();

重置层次结构

当属性文件中存在log4j.reset = true时,将在配置之前重置层次结构。

https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PropertyConfigurator.html