gpt4 book ai didi

java - Log4j2 的 FailoverAppender 错误 : appender Failover has no parameter that matches element Failovers

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:13:08 25 4
gpt4 key购买 nike

当我使用 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

我的理解是元素“Failover”中不存在元素“Failover”,对吗?为什么会这样?我看不出有什么问题,因为我有 same configuration as the log4j2 manual.

我的 log4j2.xml 中有这个配置:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration name="vcr-log4j2-config" status="debug">
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout>
<Pattern>[%d{ISO8601}] %c [%C{1}] - %p: %m%n</Pattern>
</PatternLayout>
</Console>

<Syslog name="SYS_LOG" host="test_server.com" port="514"
protocol="UDP" facility="LOCAL7">
</Syslog>

<RollingFile name="backupApp"
fileName="C:/backup.log"
filePattern="C:/backup-%d{yyyy-MM-dd_HH-mm}.log.gz">
<PatternLayout>
<Pattern>[%d{ISO8601}] [%c] - %p: %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1"
modulate="true" />
</Policies>
</RollingFile>

<Failover name="FAILOVER" primary="SYS_LOG">
<Failovers>
<AppenderRef ref="backupApp"/>
</Failovers>
</Failover>
</Appenders>

<Loggers>
<Logger name="com.test.util.CustomLogger" level="info" additivity="false">
<AppenderRef ref="SYS_LOG" />
<AppenderRef ref="STDOUT" />
</Logger>

<Logger name="STDOUT" level="info" additivity="false">
<AppenderRef ref="STDOUT" />
</Logger>

<Root level="info">
<AppenderRef ref="STDOUT" />
<AppenderRef ref="LOG" />
</Root>

<Root level="error">
<AppenderRef ref="FAILOVER"/>
</Root>
</Loggers>
</Configuration>

感谢您的帮助。

最佳答案

我在调试时看到的是调用 PluginBuilder#verifyNodeChildrenUsed() 方法来验证节点的子元素是否正确。如下所述,此方法名称与行为不匹配。

在故障转移附加程序的情况下,插件类型是:(顺便说一句,“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<Node> 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

关于java - Log4j2 的 FailoverAppender 错误 : appender Failover has no parameter that matches element Failovers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28276619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com