实践Log4j按级别分类输出 ^^^^^^^^^^^^^^^^^^^^^^^ - 作者:臭豆腐[trydofor.com] - 日期:2005-02-24 - 授权:署名-非商业-保持一致 1.0 协议 - 声明:拷贝、分发、呈现和表演本作品,请保留以上全部信息。 0. 文档目录 ^^^^^^^^^^ [[<=$INDEX]] 1. 实现目标 ^^^^^^^^^^^ 不同的log级别,输出给不同的appender 比如,DEBUG显示在控制台,其他输出到FILE 2. 实现机理 ^^^^^^^^^^^ 这里使用xml格式的配置文件,重点就是在appender 节点中加入 filter 。 ======================== dtd : log4j.dtd ====================== <!ELEMENT appender (errorHandler?,param*,layout?,filter*,appender-ref*) > ... ... <!ELEMENT filter (param*)> <!ATTLIST filter class CDATA #REQUIRED > ... ... <!ELEMENT param EMPTY> <!ATTLIST param name CDATA #REQUIRED value CDATA #REQUIRED > =============================================================== ======================== txt : log4j api ====================== org.apache.log4j.spi Class Filter java.lang.Object +--org.apache.log4j.spi.Filter All Implemented Interfaces: OptionHandler Direct Known Subclasses: DenyAllFilter, LevelMatchFilter, LevelRangeFilter, StringMatchFilter LevelMatchFilter void setAcceptOnMatch(boolean acceptOnMatch) void setLevelToMatch(String level) LevelRangeFilter void setAcceptOnMatch(boolean acceptOnMatch) void setLevelMax(Level levelMax) void setLevelMin(Level levelMin) =============================================================== 3) log4j 的xml配置文件中对filter的设置,应分别如下格式: ======================== xml : log4j config ====================== <filter class="org.apache.log4j.varia.LevelMatchFilter"> <param name="levelToMatch" value="ERROR"/> <param name="acceptOnMatch" value="true"/> </filter> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="levelMin" value="ERROR"/> <param name="levelMax" value="FATAL"/> <param name="acceptOnMatch" value="true"/> </filter> =============================================================== 3. 功能测试 ^^^^^^^^^^^ ============= java: com.trydofor.log4j.test.MultiOutput.java ============= package com.trydofor.log4j.test; import java.net.URL; import org.apache.log4j.Logger; import org.apache.log4j.xml.DOMConfigurator; public class MultiOutput { static Logger logger = Logger.getLogger(MultiOutput.class); public static void main(String[] args) { URL url = MultiOutput.class.getResource("log4j.xml"); DOMConfigurator.configure(url); logger.error("error"); logger.fatal("fatal"); logger.warn("warn"); logger.info("info"); } } =============================================================== ======================== xml: log4j.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="console" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-6p [%t - %F:%L - %c{1}] %m%n" /> </layout> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="levelMin" value="ERROR" /> <!--param name="levelMax" value="FATAL" /--> <param name="AcceptOnMatch" value="true" /> </filter> </appender> <appender name="file" class="org.apache.log4j.RollingFileAppender"> <param name="File" value="log/cafis.log" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-6p [%t - %F:%L - %c{1}] %m%n"/> </layout> </appender> <root> <level value="WARN"/> <appender-ref ref="console"/> <appender-ref ref="file"/> </root> </log4j:configuration> =============================================================== 输出结果 ............................................................ CONCOLE: 2005-02-24 19:49:29,500 ERROR ... ... error 2005-02-24 19:49:29,515 FATAL ... ... fatal FILE: 2005-02-24 19:49:29,500 ERROR ... ... error 2005-02-24 19:49:29,515 FATAL ... ... fatal 2005-02-24 19:49:29,515 WARN ... ... warn ........................................................ 4. 参考资料 ^^^^^^^^^^^ * [[log4j version #.#.# API Specification=>http://logging.apache.org/log4j/docs/api/index.html]] * jakarta-log4j-1.2.8/src/java/org/apache/log4j/xml/log4j.dtd * jakarta-log4j-1.2.8/src/java/org/apache/log4j/xml/examples/*.xml