秒懂log4j1与log4j2的区别

相信很多程序猿朋友对log4j都很熟悉,随着技术的发展,log4j的结构、性能被很多新的日志框架所替代。在设计结构上比不上slf4j,在性能上比不上logback。于是apache对垂垂老矣的log4j进行一次重生,不是优化。虽然都叫log4j但是,他们是两个完全不同的东西,为了方便区分他们,给了两个别名:log4j1、log4j2。

log4j1、log4j2区别:

1、设计理念的区别
slf4j的成功在于他的高屋建瓴,俯视一切。slf4j是日志门面(像:java的接口,没有提供任何实现),通过提供各种桥接器,适配各种日志框架(log4j1,jul等)。log4j1并没有这样的高度,于是log4j2就借鉴了slf4j的设计,log4f2有两部分组成:log4j-api、log4j-core。log4j-api和slf4j是相同的,都是日志门面,log4j-core是对log4j-api的实现,并且通过桥接器log4j-api还可以适配其他的日志系统(logback、jul等)。

2、log4j1、log4j2 引入jar包的区别:

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

//log4j2:
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-api</artifactId>
  <version>2.14.1</version>
</dependency>
//log4j-core包中已经引入了log4j-api
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-core</artifactId>
  <version>2.14.1</version>
</dependency>

3、log4j1、log4j2中类的包名的区别:

log4j1中类的包名都是以 org.apache.log4j 开头
log4j2中,log4j-api中的类包名以 org.apache.logging.log4j 开头,log4j-core中的类包名以 org.apache.logging.log4j.core 开头。


4、log4j1、log4j2 配置文件类型、文件名称的区别:
log4j1是通过一个.properties的文件作为主配置文件的 
log4j.properties文件:

log4j.rootLogger=DEBUG,console
# 输出到控制台
log4j.appender.console=org.apache.log4j.ConsoleAppender
# 设置输出样式
log4j.appender.console.layout=org.apache.log4j.PatternLayout
# 日志输出信息格式为
log4j.appender.console.layout.ConversionPattern=[I am log4j_1.x] [%-d{yyyy-MM-dd HH:mm:ss}]-%5p : %m%n


log4j2则已经弃用了.properties方式,采用的是.xml,.json或者.jsn这种方式来做。
log4j2.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="[I am log4j_2.x] [%-d{yyyy-MM-dd HH:mm:ss}]-%5p : %m%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="trace">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>


测试用例:

public class Log4jTest {
    public static void main(String[] args) {
        org.apache.log4j.Logger log4j1 = org.apache.log4j.LogManager.getLogger(Log4jTest.class);
        log4j1.info("log4j1日志" + log4j1.getClass().getName());

        org.apache.logging.log4j.Logger log4j2 = org.apache.logging.log4j.LogManager.getLogger(Log4jTest.class);
        log4j2.info("log4j2日志" + log4j2.getClass().getName());
    }
}

结果:

秒懂log4j1与log4j2的区别


 

上一篇:最牛逼的 Java 日志框架,性能无敌,横扫所有对手。。


下一篇:Spring boot-日志