首页 > 代码库 > Log4j2使用笔记

Log4j2使用笔记

             log4j2是log4j的最新版,现在已经有很多公司在使用了。log4j2和log4j的优缺点对比,请自行百度。
上一篇笔记讲了关于log4j的使用。这篇笔记主要讲解log4j2的使用

一、maven依赖的配置

        log4j-core这个依赖加进来就有log4j-core和log4j-api这两个jar包了,一般开发情况下有这两个jar就可以。
但是,笔者发现spring和struts2的日志不输出。网上找了下,发现还需要log4j-web和log4j-jcl这两个jar包,因此一共需要导4个jar包。
         技术分享

下面为maven依赖xml代码
  1. <!-- 如果采用log4j2的话,需要下面3个依赖 -->
  2. <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
  3. <dependency>
  4. <groupId>org.apache.logging.log4j</groupId>
  5. <artifactId>log4j-core</artifactId>
  6. <version>2.8.2</version>
  7. </dependency>
  8. <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-web -->
  9. <dependency>
  10. <groupId>org.apache.logging.log4j</groupId>
  11. <artifactId>log4j-web</artifactId>
  12. <version>2.8.2</version>
  13. </dependency>
  14. <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-jcl -->
  15. <dependency>
  16. <groupId>org.apache.logging.log4j</groupId>
  17. <artifactId>log4j-jcl</artifactId>
  18. <version>2.8.2</version>
  19. </dependency>

二、配置log4j2.xml

        log4j2的配置方式有多种,比如xml、json等。这里用的xml配置,我们需要把log4j2.xml这个文件放到src下。注意这个文件名必须为log4j2.xml。xml配置的方式其实不难,只要会用老版log4j的人都能看懂一点。
        配置的话可以分为2步:
              (1)配置Appenders,就是配置输出端
              (2)配置Loggers,这个就是配置比如指定包的日志级别以及Root的配置。
               注意点:定义好的输出端一定要引用才能生效
       下面直接贴代码:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!--
  3. status : 这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,会看到log4j2内部各种详细输出。
  4. 因此我们直接设置成OFF
  5. -->
  6. <Configuration status="OFF">
  7. <!-- 配置输出端 -->
  8. <Appenders>
  9. <!-- 输出到控制台 -->
  10. <Console name="Console" target="SYSTEM_OUT">
  11. <PatternLayout pattern="[%-level]%d{HH:mm:ss.SSS} [%t] %logger{36} - %msg%n" />
  12. </Console>
  13. <!-- 输出到文件 -->
  14. <!--
  15. name: 输出端的名字
  16. fileName: 指定当前日志文件的位置和文件名称
  17. filePattern: 指定当发生自动封存日志时,文件的转移和重命名规则
  18. 这个filePatten结合下面的TimeBasedTriggeringPolicy一起使用,可以实现控制日志按天生成文件.
  19. 自动封存日志的策略可以设置时间策略和文件大小策略(见下面的Policies配置)
  20. 时间策略:
  21. 文件名_%d{yyyy-MM-dd}_%i.log 这里%d表示自动封存日志的单位是天
  22. 如果下面的TimeBasedTriggeringPolicy的interval设为1,
  23. 表示每天自动封存日志一次;那么就是一天生成一个文件。
  24. 文件大小策略:
  25. 如果你设置了SizeBasedTriggeringPolicy的size的话,
  26. 超过了这个size就会再生成一个文件,这里的%i用来区分的
  27. %d{yyyy-MM-dd}会自动替代为日期,如2017-06-30
  28. -->
  29. <RollingFile name="RollingFileInfo" fileName="D:/log/tax_info.log"
  30. filePattern="D:/log/%d{yyyy-MM-dd}/tax_info_%d{yyyy-MM-dd}_%i.log">
  31. <!-- 只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
  32. <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" />
  33. <!-- 输出的格式 -->
  34. <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n" />
  35. <!--
  36. Policies:自动封存日志策略,表示日志什么时候应该产生新日志,
  37. 可以有时间策略和大小策略等,并且:只有满足一个策略,就好生成一个新的文件。
  38. 这里使用的是时间和大小都使用了,每隔1天产生新的日志文件
  39. 如果果今天的文件大小到了设定的size,则会新生成一个文件,上面的%i就表示今天的第几个文件
  40. -->
  41. <Policies>
  42. <TimeBasedTriggeringPolicy interval="1" />
  43. <SizeBasedTriggeringPolicy size="20MB" />
  44. </Policies>
  45. <!--
  46. DefaultRolloverStrategy属性如不设置,
  47. 则默认为最多同一文件夹下7个文件,这里设置了20
  48. -->
  49. <DefaultRolloverStrategy max="20"/>
  50. </RollingFile>
  51. </Appenders>
  52. <!-- 配置Loggers -->
  53. <Loggers>
  54. <!--
  55. Logger: 用于指定部分包的日志级别
  56. 日志级别局部的会覆盖全局的
  57. 比如这里hibernate的级别设为debug,而控制台没有设级别,那么控制台会打印debug级别的日志
  58. 而输出到文件这个输出端设置了info级别,那么hibernate的debug级别的日志还是看不了。
  59. 所以最终输出的级别和输出端设置的级别是有关系的。
  60. name: 包名
  61. level:日志级别
  62. additivity:是否冒泡,既在本层输出日志后是否需要在父对象上输出该日志,默认为 true。
  63. -->
  64. <Logger name="org.hibernate" level="debug" additivity="true" ></Logger>
  65. <!-- 这个root是配置全局日志级别和输出端功能和老版的log4j中根的配置是一样的 -->
  66. <Root level="info">
  67. <!-- 这里引用上面定义的输出端,千万不要漏了。 -->
  68. <AppenderRef ref="Console" />
  69. <AppenderRef ref="RollingFileInfo" />
  70. </Root>
  71. </Loggers>
  72. </Configuration>

        生成的日志文件的效果图:
                技术分享

三、java代码中使用log4j2打印日志

  1. public static void main(String[] args) {
  2. Logger logger = LogManager.getLogger(TestSpring.class);
  3. logger.debug("这是debug");
  4. logger.info("这是Info");
  5. logger.error("这是error");
  6. }


 


 

 

 

Log4j2使用笔记