文章11 | 阅读 5974 | 点赞0
这个bug是我在看源码的过程中发现的,已经发了jira给Log4J2的团队.
public void updateLoggers() {
updateLoggers(this.configuration);
}
public void updateLoggers(final Configuration config) {
final Configuration old = this.configuration;
for (final Logger logger : loggerRegistry.getLoggers()) {
logger.updateConfiguration(config);
}
firePropertyChangeEvent(new PropertyChangeEvent(this, PROPERTY_CONFIG, old, config));
}
大家可以看到,如果调用updateLoggers方法来更新配置,这样会导致PropertyChangeEvent中的old和new始终都会是一样的,对应的监听器如果有使用到就会出现问题。
this.configuration = config;
updateLoggers();
if (prev != null) {
prev.removeListener(this);
prev.stop();
}
firePropertyChangeEvent(new PropertyChangeEvent(this, PROPERTY_CONFIG, prev, config));
public void propertyChange(final PropertyChangeEvent evt) {
if (!LoggerContext.PROPERTY_CONFIG.equals(evt.getPropertyName())) {
return;
}
final Notification notif = new Notification(NOTIF_TYPE_RECONFIGURED, getObjectName(), nextSeqNo(), now(), null);
sendNotification(notif);
}
幸好event中的old和new没有被使用到。
这么长时间都没有发现, 说明这个功能很有可能就是没啥人用的一个鸡肋的功能而已···
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/sweetyi/article/details/105718180
内容来源于网络,如有侵权,请联系作者删除!