本文介绍Log4j的简单使用。
按以下步骤使用Log4j:
1. 从http://logging.apache.org/log4j/docs/download.html下载log4j,这里使用的是 log4j- 1.2.8
2. 进行配置使得你得编译工具能找到这个包。一种最简单得办法就是将用环境变量CLASSPATH指明log4j- 1.2.8 .jar的位置。如果是使用Jbuilder则可以在Tools|Config libraries配置,版本高一点的Jbuilder(比如9和X)都自带了这个包,不用配置。
3. 下面用一个例子演示如何用log4j
例1:如何使用Log4j
import org.apache.log4j.Logger;
import org.apache.log4j.Level;
import org.apache.log4j.BasicConfigurator;
public class LogTest {
private Logger logger=Logger.getLogger(LogTest.class);
public LogTest() {
//BasicConfigurator basicConfig=new BasicConfigurator();
//basicConfig.configure();
//BasicConfigurator.configure();
//logger.setLevel(Level.DEBUG);
}
public void doTest(){
logger.debug("Here is some DEBUG");
logger.info("Here is some INFO");
logger.warn("Here is some WARN");
logger.error("Here is some ERROR");
logger.fatal("Here is some FATAL");
}
public static void main(String[] args){
LogTest logTest=new LogTest();
logTest.doTest();
}
}
运行一下会有以下输出:
- Here is some INFO
- Here is some WARN
- Here is some ERROR
- Here is some FATAL
解释一下。首先 =Logger.getLogger() 的参数是LogTest.class。大家一般都这么做,即用使用Logger的类的class作参数。
其次,Log4j把输出的信息划分为5级:DEBUG、 INFO、 WARN, ERROR和FATAL。它们一级比一级严重。每个Logger都有一个级别,如果把例子中的logger的级别设为ERROR,那么只有ERROR和FATAL的信息可以输出。大家可能注意到了例1的输出中缺少Here is some DEBUG,这是因为logger的默认级别是INFO。
那么如何设置Logger的级别呢?调用Logger的setLevel(Level level)方法。比如例1中注释掉的logger.setLevel(Level.DEBUG);
上面的输出是输出到控制台的,且输出信息的格式也很简单。在每一个使用Logger的类里都对Logger进行配置也不是长久之计。那怎么办呢?答案是通过配置文件配置它。
Log4j支持两种格式的文件,.properties 文件和XML文件,这里介绍XML文件,因为它易读。下面是一个配置文件:
例2:Log4j配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!—向控制台输出,格式是SimpleLayout -->
<appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.SimpleLayout"/>
</appender>
<!—向文件testlog.txt输出,格式是PatternLayout -->
<appender name="fileAppender" class="org.apache.log4j.FileAppender">
<param name="File" value="testlog.txt"/>
<param name="Append" value="false"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %p - %m%n"/>
</layout>
</appender>
<root>
<!--优先级是debug-->
<priority value ="debug"/>
<!—指明即向控制台输出,也向文件输出-->
<appender-ref ref="consoleAppender"/>
<appender-ref ref="fileAppender"/>
</root>
</log4j:configuration>
那么怎么读取这个文件进行配置呢?看下面的例子:
例3 用XML文件配置
import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;
public class LogTest {
private Logger logger=Logger.getLogger(LogTest.class);
public LogTest() {
DOMConfigurator.configure("log4j-config.xml");
}
public void doTest(){
logger.debug("Here is some DEBUG");
logger.info("Here is some INFO");
logger.warn("Here is some WARN");
logger.error("Here is some ERROR");
logger.fatal("Here is some FATAL");
}
public static void main(String[] args){
LogTest logTest=new LogTest();
logTest.doTest();
}
}
运行程序,查看控制台和文件testlog.txt,它们的内容格式是不一样的。控制台的是这样的:
DEBUG - Here is some DEBUG
INFO - Here is some INFO
WARN - Here is some WARN
ERROR - Here is some ERROR
FATAL - Here is some FATAL
文件里是这样的:
2004-08-02 11:07:45,912 [main] DEBUG - Here is some DEBUG
2004-08-02 11:07:45,912 [main] INFO - Here is some INFO
2004-08-02 11:07:45,912 [main] WARN - Here is some WARN
2004-08-02 11:07:45,912 [main] ERROR - Here is some ERROR
2004-08-02 11:07:45,912 [main] FATAL - Here is some FATAL
对于一个应用来说,在程序启动的时候配置Logger是一个不错的方法。至于配置文件放在什么地方那就自己看着办了。