Log4j和Log4j2的区别

log4j是Apache的一个开源项目,log4j2和log4j是一个做者,只不过log4j2是从新架构的一款日志组件,他抛弃了以前log4j的不足,以及吸收了优秀的logback的设计从新推出的一款新组件。log4j2的社区活跃很频繁并且更新的也很快。java

一、配置文件类型web

log4j是经过一个.properties的文件做为主配置文件的,而如今的log4j 2则已经弃用了这种方式,采用的是.xml,.json或者.jsn这种方式来作,可能这也是技术发展的一个必然性,毕竟properties文件的可阅读性真的是有点差。spring

二、核心JAR包apache

log4j只须要引入一个jar包便可,json

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

而log4j 2则是须要2个核心api

<dependency>
 <groupId>org.apache.logging.log4j</groupId>
 <artifactId>log4j-core</artifactId>
 <version>2.5</version>
</dependency>
<dependency>
 <groupId>org.apache.logging.log4j</groupId>
 <artifactId>log4j-api</artifactId>
 <version>2.5</version>
</dependency>

log4j和log4j 2的包路径是不一样的,Apache为了区分,包路径都更新了架构

三、文件渲染app

log4j想要生效,咱们须要在web.xml中进行配置,maven

<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>classpath:config/log4j.properties</param-value>
</context-param>
<context-param>
    <param-name>log4jRefreshInterval</param-name>
    <param-value>60000</param-value>
</context-param>

这段配置目的在于告诉工程去哪加载log4j的配置文件和定义一个扫描器,这样能够为所欲为的放置log4j配置文件。测试

log4j2就比较简单,以maven工程为例,咱们只须要把log4j2.xml放到工程resource目录下就好了。你们记住一个细节点,是log4j2.xml,而不是log4j.xml,xml名字少个2都不行!!

四、Log调用

log4j和log4j2调用都是很简单的。

import org.apache.log4j.Logger;
private final Logger LOGGER = Logger.getLogger(Test.class.getName());

log4j2:

import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
private static Logger logger = LogManager.getLogger(Test.class.getName());

五、配置文件方式

最关键的最大的不一样,那就是配置文件的区别了,你们具体使用的时候再根据你的状况进行配置就好了。

log4j2 例子以下:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration status="error"> 
<!--  先定义全部的appender --> 
 <appenders> 
<!--   这个输出控制台的配置 --> 
  <Console name="Console" target="SYSTEM_OUT"> 
<!--    控制台只输出level及以上级别的信息(onMatch),其余的直接拒绝(onMismatch) --> 
   <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/> 
<!--    这个都知道是输出日志的格式 --> 
   <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/> 
  </Console> 
 
<!--   文件会打印出全部信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用 --> 
<!--   append为TRUE表示消息增长到指定文件中,false表示消息覆盖指定的文件内容,默认值是true --> 
  <File name="log" fileName="log/test.log" append="false"> 
   <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/> 
  </File> 
 
<!--   添加过滤器ThresholdFilter,能够有选择的输出某个级别以上的类别 onMatch="ACCEPT" onMismatch="DENY"意思是匹配就接受,不然直接拒绝 --> 
  <File name="ERROR" fileName="logs/error.log"> 
   <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/> 
   <PatternLayout pattern="%d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/> 
  </File> 
 
<!--   这个会打印出全部的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份创建的文件夹下面并进行压缩,做为存档 --> 
  <RollingFile name="RollingFile" fileName="logs/web.log"
      filePattern="logs/$${date:yyyy-MM}/web-%d{MM-dd-yyyy}-%i.log.gz"> 
   <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/> 
   <SizeBasedTriggeringPolicy size="2MB"/> 
  </RollingFile> 
 </appenders> 
 
<!--  而后定义logger,只有定义了logger并引入的appender,appender才会生效 --> 
 <loggers> 
<!--   创建一个默认的root的logger --> 
  <root level="trace"> 
   <appender-ref ref="RollingFile"/> 
   <appender-ref ref="Console"/> 
   <appender-ref ref="ERROR" /> 
   <appender-ref ref="log"/> 
  </root> 
 
 </loggers> 
</configuration>
相关文章
相关标签/搜索