我已经创建了一个定制过滤器,如下所示:
@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个数字,两个都应该能用.有什么不对劲的提示吗?
像RegexFilter或BurstFilter这样的预定义筛选器在附加器中也可以正常工作,但我看不出我的自定义筛选器和预定义筛选器之间有什么不同.