log4j学习篇

来源:互联网 发布:win7网络共享工具 编辑:程序博客网 时间:2024/05/07 00:59

首先,在Apache官网中下载log4j的jar包:http://logging.apache.org  将其引入项目中。

然后,在src下新建配置log4j.properties ,下面是一个例子:

log4j.rootLogger =DEBUG,stdout,Runlog,Debuglog#stdoutlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.outlog4j.appender.stdout.Threshold=DEBUGlog4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH\:mm\:ss} %c %m %n #Runloglog4j.appender.Runlog.Threshold=INFOlog4j.appender.Runlog=org.apache.log4j.FileAppenderlog4j.appender.Runlog.File = RunFile.loglog4j.appender.Runlog.Append=falselog4j.appender.Runlog.layout=org.apache.log4j.PatternLayout log4j.appender.Runlog.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH\:mm\:ss} %c %m %n #Debugloglog4j.appender.Debuglog.Threshold=DEBUGlog4j.appender.Debuglog=org.apache.log4j.FileAppenderlog4j.appender.Debuglog.File = DebugFile.loglog4j.appender.Debuglog.Append=falselog4j.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 stubif(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