我从来不需要这样做,但由于我曾经阅读过Log4J - 完整手册,我希望这些指针会有所帮助。
- 通过扩展org.apache.log4j.spi.Filter 编写您自己的自定义过滤器
- 覆盖decide method
- 使用loggingEvent.getLevel(),识别触发的日志级别。
-
在决定中编写以下逻辑
if(event.getLevel() == Level.INFO || event.getLevel() == Level.FATAL)
return ACCEPT;
return DENY;
此过滤器将接受所有 INFO 或 FATAL 日志。你可能会更有创意。
请注意,我没有测试过这段代码。这只是一个指南,希望对您有所帮助
编辑:经过一番搜索,我发现了一些可能更容易的东西。我猜,你可以使用LevelMatchFilter,这样
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="info" />
<param name="AcceptOnMatch" value="true" />
</filter>
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="fatal" />
<param name="AcceptOnMatch" value="true" />
</filter>
<filter class="org.apache.log4j.varia.DenyAllFilter"/>
参考:http://wiki.apache.org/logging-log4j/Log4jXmlFormat 用于 XML 配置。 Filter Configuration上有个版块
我不知道是什么阻止了 OP 接受这个答案。我刚刚测试过,它可以工作:
这是 XML。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="util" class="org.apache.log4j.FileAppender">
<param name="File" value="D:/util.log" />
<param name="Append" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%t %-5p %c{2} - %m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="info" />
<param name="AcceptOnMatch" value="true" />
</filter>
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="fatal" />
<param name="AcceptOnMatch" value="true" />
</filter>
<filter class="org.apache.log4j.varia.DenyAllFilter"/>
</appender>
<root>
<priority value ="debug" />
<appender-ref ref="util" />
</root>
</log4j:configuration>
这里是 Java 代码
DOMConfigurator.configure("log4j.xml");
Logger log = Logger.getLogger(Test.class);
log.debug("DEBUG");
log.info("INFO");
log.warn("WARN");
log.error("ERROR");
log.fatal("FATAL");
这是(按照配置)D:/util.log中的输出
main INFO test.Test - INFO
main FATAL test.Test - FATAL