总结一下log4j

og4j是一个非常优秀的日志操作组件,它不仅能够替代System.out.println()输出调试信息,而且还能通过配置日志级别,根据不同的需 求,输出不同级别的信息,因此可以将软件的调试与运行阶段区分开,以往采用的方式是将Debug时输出的语句逐个删除,当项目变得庞大时,这项工作会花费 大量的成本,而Log4j则省去了这部分的成本,只需要在log4j的配置文件中更改输出级别即可。它还能定义不同的输出环境,可以是控制台,也可以是文 件,同时还能定义输出信息的格式,这使信息的输出更加灵活高效。
通过这几天的学习,基本了解了Log4j的用法:
1.首先需要配置的是Logger,这是为了区别不同的Logger.Logger中有一种很重要,就是rootLogger。因为它的一些属性会被普通的logger继承下来,它的定义如下:
Java代码
  1. log4j.rootLogger=INFO,console, file  
log4j.rootLogger=INFO,console, file
对于普通的logger定义格式如下:
Java代码
  1. log4j.logger.loggerName=WARN,console   
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而言,如果没有配置日志级别,如下:
Java代码
  1. log4j.rootLogger=INFO,console, file  
  2. log4j.logger.testLogger=,console  
log4j.rootLogger=INFO,console, file log4j.logger.testLogger=,console
那么这个testLogger将会继承rootLogger的日志级别,在这里为INFO。
对于Appender而言,普通Logger是会完全继承rootLogger,对于上面这个配置,如果采用testLogger输出信息,你会发现,在console下面会输出两遍相同的信息,原因就在这里。此外在所配置的文件中也会有输出。
2.然后就是针对Appender的配置,注意Appender是指输出地,一个Logger可以使用不同的Appender,而一个Appender也可以供多个Logger使用。
Java代码
  1. log4j.appender.console=org.apache.log4j.ConsoleAppender  
  2. log4j.appender.console.layout=org.apache.log4j.PatternLayout  
  3. log4j.appender.console.layout.ConversionPattern=c:%c,m:%m,n:%n,r:%r,d:%d{DATE}.\n  
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,可以采用以下两种方式:
Java代码
  1. private Logger logger = Logger.getLogger("root");  
  2. //the former is the same as the following :  
  3. private Logger logger = Logger.getRootLogger();   
private Logger logger = Logger.getLogger("root"); //the former is the same as the following : private Logger logger = Logger.getRootLogger();

如果是普通的Logger,也有两种方式可供采用:
Java代码
  1. private Logger logger = Logger.getLogger("testLogger");  
  2. //the former is the same as the following :  
  3. private Logger logger = Logger.getLogger("log4j.logger.testLogger");   
private Logger logger = Logger.getLogger("testLogger"); //the former is the same as the following : private Logger logger = Logger.getLogger("log4j.logger.testLogger");
2.想要输出不同级别的语句可以采用如下语句:
Java代码
  1. logger.debug("this is a debug:" + logger.getName());  
  2. logger.info("this is a info:" + logger.getName());  
  3. logger.warn("this is a warn:" + logger.getName());  
  4. logger.error("this is a error:" + logger.getName());  
  5. logger.fatal("this is a fatal:" + logger.getName());  
原文地址:https://www.cnblogs.com/danghuijian/p/4400213.html