Log4J(1.X) 配置使用

Posted ProjectDaedalus

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Log4J(1.X) 配置使用相关的知识,希望对你有一定的参考价值。

Log4J,Apache下的一个开源日志组件框架,目前有1.X和2.X(Log4J2)两个版本,本文将介绍其1.X版本的配置、使用

概述

在使用日志组件之前,更多的是使用System.out.println输出log来调试代码,但是在大型项目运行起来后,该方法存在诸多不便(无法对输出信息分级,序列化,查找不便等等),这时候,而使用日志组件就可以很好的解决该问题

Log4J,是一个广泛应用于Java Web服务中的日志组件实现,配置方便使用简单,其主要有如下三个组件:

  • Logger: 获取日志信息

  • Appender: 确定日志信息的输出目的地

  • Layout: 定义日志信息的输出格式

添加Maven依赖

在 pom.xml 文件中添加 Log4J 的Maven依赖即可

 
   
   
 
  1. <!-- Log4J -->

  2. <dependency>

  3. <groupId>log4j</groupId>

  4. <artifactId>log4j</artifactId>

  5. <version>1.2.17</version>

  6. </dependency>

配置文件 log4j.properties

添加Log4J配置文件(log4j.properties),LogManager 会在 classpath 中自动搜索 Log4j.properties 配置文件

定义根日志级别、appender

 
   
   
 
  1. log4j.rootLogger = level, appendName1, appendName2, ...

level 为日志记录的级别,从高到低分别为: off > fatal > error > warn > info > debug > all log4j 推荐使用的4个级别: error, warn, info, debug。日志记录器会记录输出不低于设定级别的日志信息。例如,使用warn级别后,将只会记录输出warn、error、fatal级别的日志信息

Example:

 
   
   
 
  1. # 定义根日志记录的级别为info, 定义3个appender()并分别命名为:out, file1, file2

  2. log4j.rootLogger = info, out, file1, file2, file3

配置 Appender

配置输出目的地 log4j.appender.out, Log4J的提供的appender有:

  • org.apache.log4j.ConsoleAppender : 控制台输出器

  • org.apache.log4j.FileAppender : 日志文件输出器

  • org.apache.log4j.DailyRollingFileAppender : 日志文件输出器,按天存储

  • org.apache.log4j.RollingFileAppender : 日志文件输出器,按日志文件大小分割存储

Example:

 
   
   
 
  1. # 名为 out 的 appender 使用控制台输出

  2. log4j.appender.out = org.apache.log4j.ConsoleAppender

  3. # 名为 file1 的 appender 使用日志文件储存

  4. log4j.appender.file1 = org.apache.log4j.FileAppender

  5. # 名为 file2 的 appender 使用日志文件按天存储

  6. log4j.appender.file2 = org.apache.log4j.DailyRollingFileAppender

  7. # 名为 file3 的 appender 使用日志文件按文件大小存储

  8. log4j.appender.file3 = org.apache.log4j.RollingFileAppender

  1. ConsoleAppender

控制台输出器常用配置如下,其中threshold属性为该appender的日志级别,即控制台将只输出error级别的日志信息

 
   
   
 
  1. # target属性可以不配置

  2. log4j.appender.out.target = System.out

  3. log4j.appender.out.threshold = error

Note:

  • appender的threshold设定级别不低于根日志(rootLogger)的级别时,才会生效;如果低于根日志(rootLogger)的级别,该值将会被忽略,即该appender使用根日志(rootLogger)的级别

  • appender的threshold属性可以不配置,即该appender使用根日志(rootLogger)的级别

  1. FileAppender

日志文件输出器常用配置如下:

 
   
   
 
  1. log4j.appender.file1 = org.apache.log4j.FileAppender

  2. # 指定日志文件路径

  3. log4j.appender.file1.File = /Users/zgh/log/log1.log

  4. log4j.appender.file1.threshold = warn

  5. # 服务启动后,产生的日志信息是否追加到日志文件中,默认为true;配置为false,原日志文件将被清空

  6. log4j.appender.file1.append = false

  1. DailyRollingFileAppender

日志文件输出器(按天存储)常用配置如下:

 
   
   
 
  1. log4j.appender.file2 = org.apache.log4j.DailyRollingFileAppender

  2. # 指定日志文件路径

  3. log4j.appender.file2.File = /Users/zgh/log/log2

  4. # 指定包含日期信息的日志文件名后缀

  5. log4j.appender.file2.DatePattern='.'yyyy-MM-dd'.log'

  6. log4j.appender.file2.threshold = info

Note:

  • 需要注意的是,该输出器在会先生成一个log2的日志文件并向其中写入的当天(令日期为8.10)日志信息,在第二天时(8.11日),才会将log2文件重命名为log2.2019-08-10.log,同时重新生成一个新的log2文件用于写入当天的日志。所以,查看日志时,是找不到包含当天日期文件名的日志文件

  1. RollingFileAppender

日志文件输出器(按文件大小存储)常用配置如下:

 
   
   
 
  1. log4j.appender.file3 = org.apache.log4j.RollingFileAppender

  2. log4j.appender.file3.file = /Users/zgh/log/log3.log

  3. # 日志文件大小最大值

  4. log4j.appender.file3.MaxFileSize = 2KB

  5. # 备份日志文件最大数目,默认为1

  6. log4j.appender.file3.MaxBackupIndex = 3

  7. log4j.appender.file3.append = true;

当当前的日志文件log3.log大小达到设定的最大值2KB时,该日志文件将重命名为log3.log.1备份日志文件,同时重新生成一个新的日志文件log3.log来继续写入日志;当日志文件又一次达到最大值2KB时,会先log3.log.1备份日志文件重命名为log3.log.2,然后再将log3.log日志文件重命名为log3.log.1备份日志文件,同时又生成一个新的日志文件log3.log来继续写入日志……该过程将一直循环继续下去,其中备份日志文件的数目由MaxFileSize指定,上文配置为3,则,将会保留离当前时刻最近3个备份日志文件,其中logfilename.1备份日志文件为距离当前时刻最近的日志记录,logfilename.3备份日志文件为距离当前时刻最远的日志记录

配置 Layout

Layout用于指定Appender的输出格式,Log4J提供以下几种Layout

  • org.apache.log4j.htmlLayout : 使用HTML表格形式布局

  • org.apache.log4j.PatternLayout : 可以灵活地指定布局模式

  • org.apache.log4j.SimpleLayout : 包含日志信息的级别和信息字符串

  • org.apache.log4j.TTCCLayout : 包含日志产生的时间、线程、类别等等信息

实际开发中PatternLayout较为常用,通过conversionPattern属性设定日志信息的格式

  • %m : 日志信息

  • %M : 该日志信息所在的方法名

  • %p : 日志级别,即DEBUG, INFO, ……,实际开发中,为保证该字段信息对齐,可以使用%-5p方式实现,意为该字段至少有5个字符,不足以空格填充该字段

  • %r : 自启动到输出该日志信息耗费的时间(毫秒)

  • %c : 该日志信息所在的类名

  • %t : 输出该日志的线程名

  • %n : 换行,Windows为”rn”,Unix为”n”

  • %d : 输出该日志时的日期或时间,默认为ISO8601格式,也可以指定格式
    例如:%d{yyyy-MM-dd HH:mm:ss,SSS} 表示 2002-10-18 22:10:28,921

  • %l : 日志信息的发生位置及所在代码的行号;

 
   
   
 
  1. log4j.appender.out.layout = org.apache.log4j.PatternLayout

  2. log4j.appender.out.layout.conversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} [%t %r] %m%n

使用

完成Log4J的配置后,在需要打日志的类中通过 Logger.getLogger(String name)方法 获取一个Logger的静态对象,形参name一般采用类名。需要日志输出直接调用相关的日志级别的方法即可,Demo代码 和 本文完整的Log4J配置 参见如下:

 
   
   
 
  1. public class User {

  2. ...

  3. // 获取一个Logger对象,

  4. private static Logger logger = Logger.getLogger(User.class.getName());

  5. private int id;

  6. private String name;

  7. private int age;

  8. public int getAge() {

  9. // 输出debug级别日志

  10. logger.debug("getAge: " + age );

  11. // 输出info级别日志

  12. logger.info("getAge: " + age );

  13. return age;

  14. }

  15. ...

  16. }

 
   
   
 
  1. log4j.rootLogger = debug, out, file1, file2, file3


  2. # out

  3. # set appender

  4. log4j.appender.out = org.apache.log4j.ConsoleAppender

  5. #log4j.appender.out.target = System.out

  6. log4j.appender.out.threshold = info

  7. # set layout

  8. log4j.appender.out.layout = org.apache.log4j.PatternLayout

  9. log4j.appender.out.layout.conversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} [%t %r] %m%n


  10. # file1

  11. # set appender

  12. log4j.appender.file1 = org.apache.log4j.FileAppender

  13. log4j.appender.file1.File = /Users/zgh/log/log1.log

  14. log4j.appender.file1.threshold = warn

  15. log4j.appender.file1.append = false

  16. # set layout

  17. log4j.appender.file1.layout = org.apache.log4j.PatternLayout

  18. log4j.appender.file1.layout.conversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} %m%n



  19. # file2

  20. # set appender

  21. log4j.appender.file2 = org.apache.log4j.DailyRollingFileAppender

  22. log4j.appender.file2.File = /Users/zgh/log/log2

  23. log4j.appender.file2.DatePattern='.'yyyy-MM-dd'.log'

  24. log4j.appender.file2.threshold = info

  25. # set layout

  26. log4j.appender.file2.layout = org.apache.log4j.PatternLayout

  27. log4j.appender.file2.layout.conversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} [%t %r] %m%n



  28. #file3

  29. # set appender

  30. log4j.appender.file3 = org.apache.log4j.RollingFileAppender

  31. log4j.appender.file3.file = /Users/zgh/log/log3.log

  32. log4j.appender.file3.MaxFileSize = 2KB

  33. log4j.appender.file3.MaxBackupIndex = 3

  34. log4j.appender.file3.append = true;

  35. #set layout

  36. log4j.appender.file3.layout = org.apache.log4j.PatternLayout

  37. log4j.appender.file3.layout.conversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} [%t %r] %m%n

以上是关于Log4J(1.X) 配置使用的主要内容,如果未能解决你的问题,请参考以下文章

混合 log4j 1.x 和 log4j 2

Log4j1.2配置详解

如何指定 Log4J 2.x 配置位置?

log4j2 配置文件 log4j2.xml 详解(转载)

MyBatis3-配置使用log4j输出日志

log4j升级为log4j2(无需改动代码)