首先,在Apache官网中下载log4j的jar包:http://logging.apache.org 将其引入项目中。
然后,在src下新建配置log4j.properties ,下面是一个例子:
log4j.rootLogger =DEBUG,stdout,Runlog,Debuglog
#stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.Threshold=DEBUG
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH\:mm\:ss} %c %m %n
#Runlog
log4j.appender.Runlog.Threshold=INFO
log4j.appender.Runlog=org.apache.log4j.FileAppender
log4j.appender.Runlog.File = RunFile.log
log4j.appender.Runlog.Append=false
log4j.appender.Runlog.layout=org.apache.log4j.PatternLayout
log4j.appender.Runlog.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH\:mm\:ss} %c %m %n
#Debuglog
log4j.appender.Debuglog.Threshold=DEBUG
log4j.appender.Debuglog=org.apache.log4j.FileAppender
log4j.appender.Debuglog.File = DebugFile.log
log4j.appender.Debuglog.Append=false
log4j.appender.Debuglog.layout=org.apache.log4j.PatternLayout
log4j.appender.Debuglog.layout.ConversionPattern=%5p %d{yyyy-MM-dd HH\:mm\:ss} %c %m %n
其中 Log4j. rootLogger =level,appenderName,appenderName, …. 是一个根日志存储器
Level 表示 日志记录的优先级,从高到低有 FATAL(崩溃)、ERROR(错误)、WARN(警告)、INFO(信息)、DEBUG(调试)等。当选择了INFO的话 ,INFO 和高于INFO的FATAL、ERROR、WARN信息会被记录。一般在应用开发阶段的时候级别是DEBUG,应用发布后为ERROR。
appenderName表示日志存储器,可以有多个日志存储器分别将日志记录输出在不同地方。
上例中,stdout 是输出到控制台,而Runlog 与 Debuglog 是输出到文件。
在Stdout中:
log4j.appender.stdout=org.apache.log4j.ConsoleAppender表示储存器的种类,一共有五种:
org.apache.log4j.ConsoleAppender (控制台)
org.apache.log4j.FileAppender (文件)
org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件)
org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方)
log4j.appender.stdout.Target=System.out 表示信息打印在System.out 上
log4j.appender.stdout.Threshold=INFO 表示存储器记录级别是INFO,高于INFO的都会打印出来。但是注意,根日志存储器相当于总阀门,而这里的存储器相当于子阀门,当Log4j. rootLogger设定为ERROR,log4j.appender.stdout.Threshold设为DUBUG时,存储器也只会记载高于等于ERROR的信息。
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout表示日志记录信息输出的格式,一共有4种:
org.apache.log4j.HTMLLayout (以html格式表格形式布局)
org.apache.log4j.PatternLayout (自定义布局)
org.apache.log4j.SimpleLayout (包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout (包含日志产生的时间、线程、类别等信息)
log4j.appender.stdout.layout.ConversionPattern=%5p %d{yyyy-MM-dd HH\:mm\:ss} %c %m %n 表示格式化输出:
%d 输出日志时间其格式为 %d{yyyy-MM-dd HH:mm:ss,SSS},可指定格式 如 %d{HH:mm:ss}
%l 输出日志事件发生位置,包括类目名、发生线程,在代码中的行数
%n 换行符
%m 输出代码指定信息,如info(“message”),输出message
%p 输出优先级,即 FATAL ,ERROR 等
%r 输出从启动到显示该log信息所耗费的毫秒数
%t 输出产生该日志事件的线程名
在Runlog 不同于stdout 之处:
log4j.appender.Runlog=org.apache.log4j.FileAppender信息输出在文件中。
log4j.appender.Runlog.File = RunFile.log 信息输出文件的目录,这里是相对路径src目录中
log4j.appender.Runlog.Append=false表示日志记录文件中的信息是否追加,false表示不追加,每次记录都会删除之前的信息,重新记录,true表示不会删除而是追加记录。
下面是一个测试软件:
package t.eighteen;
import org.apache.log4j.Logger;
public class LoggerTest {
private static Logger log = Logger.getLogger(LoggerTest.class);
public static void main(String[] args) {
if(log.isInfoEnabled())
{
log.info("the TestApp is begin");
}
test();
}
private static void test() {
// TODO Auto-generated method stub
if(log.isDebugEnabled())
{
log.debug("ined the test");
}
if(log.isInfoEnabled())
{
log.info("testing...");
}
if(log.isDebugEnabled())
{
log.debug("willout the test");
}
}
}
结果 控制台:
INFO 2013-02-20 09:51:39 t.eighteen.LoggerTest the TestApp is begin
DEBUG 2013-02-20 09:51:39 t.eighteen.LoggerTest ined the test
INFO 2013-02-20 09:51:39 t.eighteen.LoggerTest testing...
DEBUG 2013-02-20 09:51:39 t.eighteen.LoggerTest willout the test
Runlog.txt:
INFO 2013-02-20 09:51:39 t.eighteen.LoggerTest the TestApp is begin
INFO 2013-02-20 09:51:39 t.eighteen.LoggerTest testing...
Debuglog.txt:
INFO 2013-02-20 09:51:39 t.eighteen.LoggerTest the TestApp is begin
DEBUG 2013-02-20 09:51:39 t.eighteen.LoggerTest ined the test
INFO 2013-02-20 09:51:39 t.eighteen.LoggerTest testing...
DEBUG 2013-02-20 09:51:39 t.eighteen.LoggerTest willout the test