如何将应用的log4j替换成logback详解

 更新时间:2017年02月25日 11:19:11   作者:周立  
无论从设计上还是实现上,Logback相对log4j而言有了相对多的改进。所以下面这篇文章主要给大家介绍了关于如何将应用的log4j换成logback的相关资料,文中介绍的很详细,需要的朋友可以参考下。

前言

最近考虑到log4j很久不更新、性能相对弱,以及一些项目本身的原因,经过较为谨慎的考虑,决定改用logback。如果你已经对log4j很熟悉,你也可以很快上手logback。如果你喜欢使用log4j,你也许会迷上使用logback。迁移还是比较顺利的,花了1个小时左右就搞定了,做个简单的笔记。

方法如下

(1) 首先去掉所有log4j相关的依赖,主要有:

<dependency>
 <groupId>log4j</groupId>
 <artifactId>log4j</artifactId>
</dependency>

以及:

<dependency>
 <groupId>org.slf4j</groupId>
 <artifactId>slf4j-log4j12</artifactId>
</dependency>

(2) 为项目添加以下依赖:

<!-- logback日志配置开始 -->
<dependency>
 <groupId>ch.qos.logback</groupId>
 <artifactId>logback-core</artifactId>
</dependency>
<dependency>
 <groupId>ch.qos.logback</groupId>
 <artifactId>logback-access</artifactId>
</dependency>
<dependency>
 <groupId>ch.qos.logback</groupId>
 <artifactId>logback-classic</artifactId>
</dependency>
<dependency>
 <groupId>org.slf4j</groupId>
 <artifactId>log4j-over-slf4j</artifactId>
</dependency>
<!-- logback日志配置结束 -->

(3) 删除项目/src/main/resources目录下的log4j.properties,并在该目录添加logback.xml文件,logback.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
 <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
 <Target>System.out</Target>
 <encoder>
 <pattern>%date [%level] [%thread] %logger{80} [%file : %line] %msg%n</pattern>
 </encoder>
 </appender>
 <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
 <encoder>
 <pattern>%date [%level] [%thread] %logger{80} [%file : %line] %msg%n</pattern>
 </encoder>
 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
 <fileNamePattern>${catalina.home}/logs/yzf/sql%d{yyyy-MM-dd}.log</fileNamePattern>
 <!-- 保留 30天数据,默认无限-->
 <MaxHistory>30</MaxHistory>
 </rollingPolicy>
 </appender>
 <logger name="org.springframework" level="INFO" />
 <logger name="org.apache" level="INFO" />
 <logger name="com.itmuch" level="WARN" />
 <root level="INFO">
 <appender-ref ref="CONSOLE" />
 <appender-ref ref="FILE" />
 </root>
</configuration>

拓展

slf4j-api、slf4j-log4j12以及log4j之间什么关系?

几乎在每个jar包里都可以看到log4j的身影,在多个子工程构成项目中,slf4j相关的冲突时不时就跳出来让你不爽,那么slf4j-api、slf4j-log4j12还有log4j他们是什么关系?我把自己了解的和大家简单分享一下:

slf4j:Simple Logging Facade for Java,为java提供的简单日志Facade。Facade:门面,更底层一点说就是接口。他允许用户以自己的喜好,在工程中通过slf4j接入不同的日志系统。更直观一点,slf4j是个数据线,一端嵌入程序,另一端链接日志系统,从而实现将程序中的信息导入到日志系统并记录。 

因此,slf4j入口就是众多接口的集合,他不负责具体的日志实现,只在编译时负责寻找合适的日志系统进行绑定。具体有哪些接口,全部都定义在slf4j-api中。查看slf4j-api源码就可以发现,里面除了public final class LoggerFactory类之外,都是接口定义。因此,slf4j-api本质就是一个接口定义。

下图比较清晰的描述了他们之间的关系:

 

当系统采用log4j作为日志框架实现的调用关系:

首先系统包含slf4j-api作为日志接入的接口;

at compile时slf4j-api中public final class LoggerFactor类中

private final static void bind() 方法会寻找具体的日志实现类绑定,主要通过

StaticLoggerBinder.getSingleton();语句调用

slf4j-log4j12:链接slf4j-api和log4j中间的适配器。它实现了slf4j-apiz中StaticLoggerBinder接口,从而使得在编译时绑定的是slf4j-log4j12的getSingleton()方法

log4j:这个是具体的日志系统。通过slf4j-log4j12初始化Log4j,达到最终日志的输出。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

相关文章

  • 使用idea将工具类打包使用的详细教程

    使用idea将工具类打包使用的详细教程

    这篇文章主要介绍了使用idea将工具类打包使用的详细教程,本文通过图文并茂给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Java实战房屋租赁网的实现流程

    Java实战房屋租赁网的实现流程

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用java+SSM+jsp+mysql+maven实现一个房屋租赁网站,大家可以在过程中查缺补漏,提升水平
    2021-11-11
  • 深入了解SparkSQL中数据的加载与保存

    深入了解SparkSQL中数据的加载与保存

    这篇文章主要为大家详细介绍了SparkSQL中数据的加载与保存的相关知识,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解下
    2023-11-11
  • JWT整合Springboot的方法步骤

    JWT整合Springboot的方法步骤

    本文主要介绍了JWT整合Springboot的方法步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • CodeGPT + IDEA + DeepSeek如何在IDEA中引入DeepSeek实现AI智能开发

    CodeGPT + IDEA + DeepSeek如何在IDEA中引入DeepS

    文章介绍了如何在IDEA中使用CodeGPT和DeepSeek插件实现AI智能开发,具体内容包括安装步骤、配置APIkey和参数设置等,本文通过图文并茂的形式给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2025-02-02
  • 理解Java当中的回调机制(翻译)

    理解Java当中的回调机制(翻译)

    今天我要和大家分享一些东西,举例来说这个在JavaScript中用的很多。我要讲讲回调(callbacks)。你知道什么时候用,怎么用这个吗?你真的理解了它在java环境中的用法了吗?当我也问我自己这些问题,这也是我开始研究这些的原因
    2014-10-10
  • 使用Mybatis-Plus实现对象属性自动填充功能

    使用Mybatis-Plus实现对象属性自动填充功能

    这篇文章主要介绍了如何使用Mybatis-Plus实现对象属性自动填充功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,感兴趣的朋友们下面随着小编来一起来学习吧
    2024-01-01
  • Java使用Scala实现尾递归优化来解决爆栈问题

    Java使用Scala实现尾递归优化来解决爆栈问题

    Scala 作为一种多范式的编程语言,结合了面向对象和函数式编程的特性,在 Scala 中,尾递归 是通过编译器优化来防止栈溢出问题的,尾递归优化是一种特殊的优化方式,可以让递归调用不使用新的栈帧,所以本文介绍了在Java项目中如何使用Scala实现尾递归优化来解决爆栈问题
    2024-10-10
  • Mybatis-Plus将字段设置为null解决方法

    Mybatis-Plus将字段设置为null解决方法

    MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增 强不做改变,为简化开发、提高效率而生,下面这篇文章主要给大家介绍了关于Mybatis-Plus将字段设置为null的解决方法的相关资料,需要的朋友可以参考下
    2023-04-04
  • SpringMVC+ZTree实现树形菜单权限配置的方法

    SpringMVC+ZTree实现树形菜单权限配置的方法

    本篇文章主要介绍了SpringMVC+ZTree实现树形菜单权限配置的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12

最新评论