作者:Liu_y_菁 | 来源:互联网 | 2023-05-23 20:20
当我使用log4j 2.1编译我的spring 3.2.9 web应用程序时,控制台中会出现此错误:
2015-02-02 12:08:25,213 ERROR appender Failover has no parameter that matches element Failovers
我的理解是"故障转移"元素中不存在元素"故障转移",对吧?为什么会这样?我没有看到什么错,因为我有与log4j2手册相同的配置.
我在log4j2.xml中有这个配置:
[%d{ISO8601}] %c [%C{1}] - %p: %m%n
[%d{ISO8601}] [%c] - %p: %m%n
谢谢您的帮助.
1> Robin Coe..:
我在调试时看到的是调用PluginBuilder#verifyNodeChildrenUsed()方法,您可以预期,验证Node的子元素是否正确.如下所述,此方法名称与行为不匹配.
在故障转移appender的情况下,插件类型是:(顺便说一下,"isDeferChildren"中的额外"=="就在toString()实现中,并且不会影响测试.)
PluginType [pluginClass=class org.apache.logging.log4j.core.appender.FailoversPlugin, key=failovers, elementName=failovers, isObjectPrintable=false, isDeferChildren==false, category=core]
这种方法的实现:
private void verifyNodeChildrenUsed() {
final List children = node.getChildren();
if (!(pluginType.isDeferChildren() || children.isEmpty())) {
for (final Node child : children) {
final String nodeType = node.getType().getElementName();
final String start = nodeType.equals(node.getName()) ? node.getName() : nodeType + ' ' + node.getName();
LOGGER.error("{} has no parameter that matches element {}", start, child.getName());
}
}
}
当nodeType是FailoversPlugin类(见上文)时,节点类型为"appender",但名称为"Failovers".因此,相等的测试产生字符串"appender Failovers".
我没有完全挖掘的是为什么调用这个方法,如果节点不为空并且延迟属性为false,则必须显示错误消息.在我看来,这里的逻辑依赖于堆栈上的东西,并且通过这种追踪是很麻烦的.
我真正想做的是问开发人员负责什么意图,因为我不清楚行为是否正确.嗯,显然在这种情况下是这样的.:S