秒懂log4j1与log4j2的区别

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

log4j1、log4j2区别:

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

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

//log4j1:

    log4j
    log4j
    1.2.17


//log4j2:

  org.apache.logging.log4j
  log4j-api
  2.14.1

//log4j-core包中已经引入了log4j-api

  org.apache.logging.log4j
  log4j-core
  2.14.1

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文件:



    
        
            
        
    
    
        
            
        
    


测试用例:

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());
    }
}

结果:


 

你可能感兴趣的:(java基础进阶)