论坛首页 Java企业应用论坛

总结一下log4j

浏览 4027 次
精华帖 (4) :: 良好帖 (4) :: 新手帖 (18) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-07-25  
log4j是一个非常优秀的日志操作组件,它不仅能够替代System.out.println()输出调试信息,而且还能通过配置日志级别,根据不同的需求,输出不同级别的信息,因此可以将软件的调试与运行阶段区分开,以往采用的方式是将Debug时输出的语句逐个删除,当项目变得庞大时,这项工作会花费大量的成本,而Log4j则省去了这部分的成本,只需要在log4j的配置文件中更改输出级别即可。它还能定义不同的输出环境,可以是控制台,也可以是文件,同时还能定义输出信息的格式,这使信息的输出更加灵活高效。
通过这几天的学习,基本了解了Log4j的用法:
1.首先需要配置的是Logger,这是为了区别不同的Logger.Logger中有一种很重要,就是rootLogger。因为它的一些属性会被普通的logger继承下来,它的定义如下:
log4j.rootLogger=INFO,console, file

对于普通的logger定义格式如下:
log4j.logger.loggerName=WARN,console 

这里的INFO、WARN是指日志的级别,console、file是指日志的Appender,可以理解为日志的输出地。
可以定义多个不同的Appender,当然这里的file,console只是一个指代符号,具体file代表哪个Appender来执行,还需要对其进行配置。
日志的级别常用的有五种,从低到高顺序如下:DEBUG<INFO<WARN<ERROR<FATAL。配置了日志级别,比如说WARN,将会输出不小于WARN级别的日志。

日志的继承关系,我在这里只重点描述一下rootLogger与普通Logger之前的继承关系,对于普通Logger之前的继承关系可以查看相关文档。
如果已经配置了rootLogger,那么对于普通的Logger而言,如果没有配置日志级别,如下:
log4j.rootLogger=INFO,console, file
log4j.logger.testLogger=,console

那么这个testLogger将会继承rootLogger的日志级别,在这里为INFO。
对于Appender而言,普通Logger是会完全继承rootLogger,对于上面这个配置,如果采用testLogger输出信息,你会发现,在console下面会输出两遍相同的信息,原因就在这里。此外在所配置的文件中也会有输出。
2.然后就是针对Appender的配置,注意Appender是指输出地,一个Logger可以使用不同的Appender,而一个Appender也可以供多个Logger使用。
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=c:%c,m:%m,n:%n,r:%r,d:%d{DATE}.\n

这里的console即为上面配置的logger。上面三行中,第一行配置的是对象Logger的Appender,即输出源。第二行配置的是显示的模式类型,一般的配置成SimpleLayout,这里配置成PatternLayout,是为了配置输出的形式,下面的log4j.appender.console.layout.ConversionPattern是配置的输出格式。具体的查查文档就OK了。
Log4j总的来说,使用起来还是挺方便的,功能挺强大,使用很方便,在程序中,如下:
1.首先要根据配置文件得到一个Logger对象,对于rootLogger,可以采用以下两种方式:
private Logger logger = Logger.getLogger("root");
//the former is the same as the following :
private Logger logger = Logger.getRootLogger(); 


如果是普通的Logger,也有两种方式可供采用:
private Logger logger = Logger.getLogger("testLogger");
//the former is the same as the following :
private Logger logger = Logger.getLogger("log4j.logger.testLogger"); 

2.想要输出不同级别的语句可以采用如下语句:
logger.debug("this is a debug:" + logger.getName());
logger.info("this is a info:" + logger.getName());
logger.warn("this is a warn:" + logger.getName());
logger.error("this is a error:" + logger.getName());
logger.fatal("this is a fatal:" + logger.getName()); 

   发表时间:2010-07-26  
好文章多多发表
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics