实践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