spring 中使用 logback打印日志,替换其他日志如log4j,commons-logging

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 1.  Spring MVC集成slf4j-log4j 关于slf4j和log4j的相关介绍和用法,网上有很多文章可供参考,但是关于logback的,尤其是Spring MVC集成logback的,就相对少一些了,而且其中一些也有着这样那样的问题。进入正题之前先简单介绍下Spring MVC集成slf4j-log4j的过程,如下: 1)      在pom.xml文

1.  Spring MVC集成slf4j-log4j

关于slf4j和log4j的相关介绍和用法,网上有很多文章可供参考,但是关于logback的,尤其是Spring MVC集成logback的,就相对少一些了,而且其中一些也有着这样那样的问题。进入正题之前先简单介绍下Spring MVC集成slf4j-log4j的过程,如下:

1)      在pom.xml文件中添加slf4j-log4j的依赖,完成后的classpath中将新增三个jar包,分别是:slf4j-api.jar、log4j.jar及slf4j-log4j.jar

2)      在当前classpath中添加log4j.properties配置文件,按照log4j的参数语法编写该文件

3)      以上两步完成后,普通的Java项目就能使用slf4j-log4j进行日志处理了;对于Java Web项目,还需要在web.xml文件中配置Log4jConfigLocation和Log4jConfigListener

2.  log4j与logback简要比较

本文意在阐述用logback替代log4j作为Spring MVC项目的日志处理组件。这两者虽然作者相同,但log4j早已被托管给Apache基金会维护,并且自从2012年5月之后就没有更新了。而logback从出生开始就是其作者奔着取代log4j的目的开发的,因此一方面logback继承了log4j大量的用法,使得学习和迁移的成本不高,另一方面logback在性能上要明显优于log4j,尤其是在大量并发的环境下,并且新增了一些log4j所没有的功能(如将日志文件压缩成zip包等)

3.  Spring MVC集成slf4j-logback

3.1.      添加依赖

<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>1.1.4</version>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-core</artifactId>
			<version>1.1.4</version>
		</dependency>

		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>log4j-over-slf4j</artifactId>
			<version>1.7.20</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.7.21</version>
		</dependency>
		<dependency>
			<groupId>org.logback-extensions</groupId>
			<artifactId>logback-ext-spring</artifactId>
			<version>0.1.2</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
			<version>1.7.12</version>
		</dependency>

注意:删除原有的log4j.jar。

如上所示是集成所需要的依赖,其中:

第一个logback-classic包含了logback本身所需的slf4j-api.jar、logback-core.jar及logback-classsic.jar

第二个logback-ext-spring是由官方提供的对Spring的支持,它的作用就相当于log4j中的Log4jConfigListener;这个listener,网上大多都是用的自己实现的,原因在于这个插件似乎并没有出现在官方文档的显要位置导致大多数人并不知道它的存在

第三个jcl-over-slf4j是用来把Spring源代码中大量使用到的commons-logging替换成slf4j,只有在添加了这个依赖之后才能看到Spring框架本身打印的日志,否则只能看到开发者自己打印的日志

3.2.      编写logback.xml

logback与log4j一样,也需要在classpath中编写配置文件。但logback配置文件似乎比log4j复杂一些:log4j不仅支持xml格式的配置文件,还支持properties格式的,而logback只支持xml格式的。好在官方提供了一个在线工具,可以将log4j的properties文件直接转换成logback的xml文件,地址如下:

http://logback.qos.ch/translator/

logback的详细用法及其xml文件的相关语法,可参见它的用户向导,地址如下:

http://logback.qos.ch/manual/introduction.html

3.3.      配置web.xml

与log4j类似,logback集成到Spring MVC项目中,也需要在web.xml中进行配置,同样也是配置一个config location和一个config listener,如下所示:

[html]  view plain  copy
  1. <context-param>  
  2.          <param-name>logbackConfigLocation</param-name>  
  3.          <param-value>classpath:logback.xml</param-value>  
  4. </context-param>  
  5. <listener>  
  6.          <listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>  
  7. </listener>  

其中LogbackConfigListener由前述的logback-ext-spring依赖提供,若不依赖它则找不到这个listener类

4.  其它

从上面可以看出,slf4j-log4j和slf4j-logback集成到Spring MVC(或推广到其它Java Web项目中)的步骤大体是相同的。集成完毕后,就可以通过slf4j提供的API隐藏掉logback(或log4j)的具体实现,直接进行日志处理了

使用slf4j-api的时候,需要注意的是:slf4j采用了单例模式,项目中创建的每一个Logger实例都会按你传入的name(传入的Class<?>实例也会被转换成String型的name)保存到一个静态的ConcurrentHashMap中;因此只要name(或Class<?>实例)相同,每次返回的实际上都是同一个Logger实例。因此完全没必要把Logger实例作为常量或静态成员,随用随取即可。实际上,其作者也不建议那么做

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
27天前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
185 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
24天前
|
Java 中间件
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
66 5
|
2月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
259 3
|
4月前
|
Kubernetes Ubuntu Windows
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
136 3
|
2月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1662 14
|
2月前
|
Python
log日志学习
【10月更文挑战第9天】 python处理log打印模块log的使用和介绍
39 0
|
2月前
|
数据可视化
Tensorboard可视化学习笔记(一):如何可视化通过网页查看log日志
关于如何使用TensorBoard进行数据可视化的教程,包括TensorBoard的安装、配置环境变量、将数据写入TensorBoard、启动TensorBoard以及如何通过网页查看日志文件。
231 0
|
2月前
|
存储 分布式计算 NoSQL
大数据-136 - ClickHouse 集群 表引擎详解1 - 日志、Log、Memory、Merge
大数据-136 - ClickHouse 集群 表引擎详解1 - 日志、Log、Memory、Merge
47 0
|
2月前
|
缓存 Linux 编译器
【C++】CentOS环境搭建-安装log4cplus日志组件包及报错解决方案
通过上述步骤,您应该能够在CentOS环境中成功安装并使用log4cplus日志组件。面对任何安装或使用过程中出现的问题,仔细检查错误信息,对照提供的解决方案进行调整,通常都能找到合适的解决之道。log4cplus的强大功能将为您的项目提供灵活、高效的日志管理方案,助力软件开发与维护。
62 0
|
3月前
|
Java
日志框架log4j打印异常堆栈信息携带traceId,方便接口异常排查
日常项目运行日志,异常栈打印是不带traceId,导致排查问题查找异常栈很麻烦。