Log4j学习总结

日志在任何程序系统是不可缺少的。而开源项目Log4j是一个功能强大的日志组件,提供方便的日志记录功能。更多的介绍可以参考下列链接。

学习参考链接:

官网Log4j 1.x

官网Log4j 2.x

我自己学习过程中,是创建一个maven项目,以1.2.17版本为例,在pom.xml 文件中增加以下配置: maven会自动下载log4j-1.2.17.jar 到项目中

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

接下来是,配置文件, 支持两种格式的配置文件:

.xml文件

.properties文件 (使用的较多), Log4j.properties文件

 ### 设置###
log4j.rootLogger = debug,stdout,D,E

### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

### 输出DEBUG 级别以上的日志到=E://logs/error.log ###
log4j.appender.D = org.apache.log4j.RollingFileAppender
### 文件目录及文件 ###
log4j.appender.D.File = E://logs/log.log
### 最大文件大小 ###
log4j.appender.D.MaxFileSize = 100kb
### 备份文件个数 ###
log4j.appender.D.MaxBackupIndex = 10
### 往后追加 ###
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
### 日志布局格式 ###
log4j.appender.D.layout = org.apache.log4j.PatternLayout
### 日志输出格式 ###
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 输出ERROR 级别以上的日志到=E://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =E://logs/error.log 
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR 
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

1. 配置根Logger

  根logger主要定义log4j支持的日志级别及输出目的地,其语法为:
  log4j.rootLogger = [ level ] , appenderName, appenderName, …
  其中,level 是日志记录的优先级,分为OFF < FATAL < ERROR < WARN < INFO < DEBUG < ALL或者自定义的级别。不区分大小写。

  注意:rootLogger 默认是对整个工程生效的。 
  需在控制台输入,只需将其中一个appender定义为stdout即可

  

  常用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。
  appenderName指定日志信息输出到哪个地方,可同时指定多个输出目的地

2. 配置输出目的地Appender

  Appender主要定义日志信息输出在什么位置,主要语法为:

  log4j.appender.appenderName = classInfo
  log4j.appender.appenderName.option1 = value1
  …
  log4j.appender.appenderName.optionN = valueN

  Log4j提供的appender有以下几种:

  org.apache.log4j.ConsoleAppender(控制台),
  org.apache.log4j.FileAppender(文件),
  org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
  org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
  org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
  org.apache.log4j.JDBCAppender(将日志信息保存到数据库中)


  以ConsoleAppender为例,如:

  log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  log4j.appender.stdout.Target=System.out

3. 配置日志信息的格式Layout
  Layout 负责格式化Appender的输出,其语法为:

  log4j.appender.appenderName.layout = classInfo
  log4j.appender.appenderName.layout.option1 = value1
  …
  log4j.appender.appenderName.layout.optionN = valueN

  其中,Log4j提供的layout有以下几种:

  org.apache.log4j.HTMLLayout(以HTML表格形式布局),
  org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
  org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
  org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

4. 设置package输出级别
  可以设置不同package的日志输出级别,语法为:
  log4j.logger.packageName=level
  其中,packageName为实际的包名,level为日志级别,例如:

  log4j.logger.org.springframework=info
  log4j.logger.org.apache.catalina=info
  log4j.logger.org.apache.commons.digester.Digester=info
  log4j.logger.log.test=debug

注意日志输出格式: 

log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

%c 输出日志信息所属的类的全名
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-M-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28
%f 输出日志信息所属的类的类名
%l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行
%m 输出代码中指定的信息,如log(message)中的message
%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推
%r 输出自应用启动到输出该日志信息所耗费的毫秒数
%t 输出产生该日志事件的线程名


当配置好log4j后,我们在代码中怎么使用呢?

1. 获取日志记录器

  一般情况下,在一个类中,会通过该类名来获取。如下例子,在maven项目中的App.java类中

static Logger logger = Logger.getLogger(App.class.getName());

2.  读取配置文件

  笔者测试时,是创建的maven项目,需要注意下面。

  当配置文件放在src/main/resources的目录下时,使用Class.getResourceAsStream()方法来加载

Properties prop = new Properties();
prop.load(this.getClass().getResourceAsStream("/log4j.properties"));

  注意:上面代码,我这里省略了try...catch代码块。

  1).若写成"log4j.properties",则是去当前类的class文件同一目录下找
  2).若写成"/log4j.properties",/代表从根目录下查找配置文件,即target/classes。resources编译后的文件也在该目录下

3. 写入log信息

  调用下面的方法即可:

Logger.debug(Object message);  
Logger.info(Object message);  
Logger.warn(Object message);  
Logger.error(Object message);
...

  

原文地址:https://www.cnblogs.com/FocusIN/p/6725148.html