Java Log4j2自定义过滤器
我试图在Log4J2中实现和配置一个基于ThresholdFilter的定制过滤器,但打算做更多的工作。我见过关于自定义附加器的主题,它们遵循相同的插件注释语法,但没有找到关于自定义附加器的主题 MyCustomFilter.java(基于ThresholdFilter) log4j2.xmlJava Log4j2自定义过滤器,java,apache,log4j2,Java,Apache,Log4j2,我试图在Log4J2中实现和配置一个基于ThresholdFilter的定制过滤器,但打算做更多的工作。我见过关于自定义附加器的主题,它们遵循相同的插件注释语法,但没有找到关于自定义附加器的主题 MyCustomFilter.java(基于ThresholdFilter) log4j2.xml <?xml version="1.0" encoding="UTF-8"?> <Configuration> <MyCustomFilter level="fatal"
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<MyCustomFilter level="fatal" />
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%d %-5p [%c{5}.%M():%L] %m%n" />
</Console>
</Appenders>
<Loggers>
<Logger name="com.me.test.logger" level="info" additivity="false">
<AppenderRef ref="STDOUT" />
</Logger>
<!-- Root Logger -->
<Root level="warn">
<AppenderRef ref="STDOUT" />
</Root>
</Loggers>
</Configuration>
配置语法似乎与Apache文档中的语法相匹配,并模仿ThresholdFilter(一个可用的、提供的过滤器)。如果如图所示将其作为上下文级筛选器放置,则不会看到任何错误,但不会调用或应用该筛选器
如果我将自定义筛选器标记移动到Appender中(这在开箱即用筛选器中是可能的),我会得到2015-03-24 16:20:11713错误AppenderRef包含无效元素或属性“MyCustomFilter”
基于log42j核心源代码中的示例,我认为这会起作用
我做错了什么?能否显示配置的第一行,即
元素
您可以指定
使log4j的内部日志显示在控制台上,这可能有助于解决问题
也许log4j在找到你的插件时遇到了麻烦
编译插件时,会创建一个序列化插件列表文件。此文件包含插件名称和二进制格式的类名。如果此文件包含在包含插件类的jar中,log4j可以找到插件。帮助log4j找到插件的另一种方法是指定packages
属性图文件:
…
有关更多详细信息,请参阅PluginManager如何尝试查找插件。为将来的读者关闭循环。添加packages属性似乎有助于PluginManager查找我的筛选器。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<MyCustomFilter level="fatal" />
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%d %-5p [%c{5}.%M():%L] %m%n" />
</Console>
</Appenders>
<Loggers>
<Logger name="com.me.test.logger" level="info" additivity="false">
<AppenderRef ref="STDOUT" />
</Logger>
<!-- Root Logger -->
<Root level="warn">
<AppenderRef ref="STDOUT" />
</Root>
</Loggers>
</Configuration>
public class LoggingRunner {
public static void main(String[] args) {
Logger logger = LogManager.getLogger("com.me.test.logger");
logger.fatal("Fatal");
logger.error("Error");
logger.debug("Debug");
logger.info("Info");
System.out.println("end it");
}
}