csdn上有很多关于log4j的例子和教程,有的写的挺好的,但为了巩固知识,自己也写一份吧。
我对log4j的要求不是很高,主要有两个用途
一) web应用程序中如何使用log4j和common-logging 包;
二) 普通的java应用程序如何使用log4j和common-logging 包;
首先先总结简单的,在普通java应用程序中如何使用log4j和common-logging 包
步骤如下:
1) 将 log4j.jar 和 common-logging.jar 两个包加入到环境变量或者CLASSPATH
2) 写log4j.xml 文件,例如:
<?xml version="1.0" encoding="UTF-8">
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<appender name="file" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="log.log"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConVersionPattern" value="%d [%t] %p - %m%n"/>
</layout>
</appender>
<logger name="com.log4j.test.test" additivity="false">
<level value="debug"/>
<appender-ref ref="file"/>
</logger>
<root>
<level value="info"/>
<appender-ref ref="file"/>
</root>
</log4j:configuration>
3) 程序中使用方法:
package com.log4j.test;
import org.apache.log4j.xml.DOMConfigurator;
import org.apache.commons.logging.*;
class ConfigLog4j { public static void config() { DOMConfigurator.configure("config/log4j.xml"); } } public class TestLog4j { private Log log =LogFactory.getLog(TestLog4j.class);
public TestLog4j() { ConfigLog4j.config();
}
public void testPrint1() { log.debug("debug test"); log.info("info test"); log.warn("warn test"); log.error("error test"); }
public static void main(String[] args) { TestLog4j test = new TestLog4j(); test.testPrint1();
}
}
OK ! 这样就会按要求打印消息了。
另附 log4j.dtd
log4j:configuration | +-- appender (name, class) | | | +-- param (name, value) | +-- layout (class) | | | +-- param (name, value) +-- logger (name, additivity) | | | +-- level (class, value) | | | | | +-- param (name, value) | +-- appender-ref (ref) +-- root | +-- param (name, class) +-- level | | | +-- param (name, value) +-- appender-ref (ref)
输出格式定义:
%m |
输出代码中指定的消息 |
%p |
输出优先级 |
%r |
输出自应用启动到输出该log信息耗费的毫秒数 |
%c |
输出所属的类目,通常就是所在类的全名 |
%t |
输出产生该日志事件的线程名 |
%n |
输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n” |
%d |
输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921 |
%l |
输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。一般使用了它就不需使用%c了。 |
参考文献:

|