首先,在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