我创建了一个如下所示的自定义过滤器:
@Plugin(name = "EmptyMessageFilter", category = Node.CATEGORY, elementType = Filter.ELEMENT_TYPE, printObject = true)
public class EmptyMessageFilter extends AbstractFilter {
@PluginFactory
public static EmptyMessageFilter createFilter() {
return new EmptyMessageFilter();
}
...
}
log4j 配置文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Properties>
<Property name="LOG_PATTERN">
%d{yyyy-MM-dd HH:mm:ss.SSS}
</Property>
</Properties>
<!-- When filter is here it works -->
<Filters>
<EmptyMessageFilter/>
</Filters>
<Appenders>
<Console name="ConsoleAppender" target="SYSTEM_OUT" follow="true">
<PatternLayout pattern="${LOG_PATTERN}"/>
<!-- When filter is here it does not work -->
<Filters>
<EmptyMessageFilter/>
</Filters>
</Console>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="ConsoleAppender"/>
</Root>
</Loggers>
</Configuration>
当过滤器配置在控制台附加程序内部时,它不起作用,但当它位于附加程序外部时,它可以工作。 根据这个https://logging.apache.org/log4j/2.x/manual/configuration.html#Loggers两者都应该工作。任何提示出了什么问题吗?
我认为
log4j
无法识别xml中的哪个Filter
类,请尝试在标签中使用扩展Filter的完全限定类名。