ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

spring (boot)使用log4j2实现slf4j日志门面

2021-12-11 13:33:15  阅读:221  来源: 互联网

标签:spring boot slf4j 报错 JCL 日志 log4j2 log4j


jcl-over-slf4j + slf4j-api + log4j-slf4j-impl + log4j-core

解决启动时报错:

No SLF4J providers were found

Failed to load class "org.slf4j.impl.StaticLoggerBinder

只想看解决报错的点击>>这里<<



一、Java日志框架

详情参考1 详情参考2

当系统逐渐复杂,System.out.println() 满足不了我们的时候,就需要写日志了

Java日志时间轴:

log4j(1999-2015)--> JUL(2000-)--> JCL --> slf4j --> logback(2006-) --> log4j2(2012-)

  1. log4j(作者Ceki Gülcü)出来时就等到了广泛的应用(注意这里是直接使用),是Java日志事实上的标准,并成为了Apache的项目

  2. Apache要求把log4j并入到JDK,SUN拒绝,并在jdk1.4版本后增加了JUL(java.util.logging)

  3. 毕竟是JDK自带的,JUL也有很多人用。同时还有其他日志组件,如SimpleLog等。这时如果有人想换成其他日志组件,如log4j换成JUL,因为api完全不同,就需要改动代码。

  4. Apache见此,开发了JCL(Jakarta Commons Logging),即commons-logging-xx.jar。它只提供一套通用的日志接口api,并不提供日志的实现。很好的设计原则嘛,依赖抽象而非实现。这样应用程序可以在运行时选择自己想要的日志实现组件。

  5. 这样看上去也挺美好的,但是log4j的作者觉得JCL不好用,自己开发出slf4j,它跟JCL类似,本身不提供日志具体实现,只对外提供接口或门面。目的就是为了替代JCL。同时,还开发出logback,一个比log4j拥有更高性能的组件,目的是为了替代log4j。

  6. Apache参考了logback,并做了一系列优化,推出了log4j2

总结,目前我们使用JCL或slf4j门面,使用logback或log4j2实现



二、日志桥接

首先看slf4j官方说日志应该如何桥接

官方文档1

官方文档2

Spring 框架选择使用了 JCL 作为默认日志输出。而 Spring Boot 默认选择了 SLF4J 结合 LogBack

所以在Spring中我们应当使用jcl-over-slf4j + slf4j-api + log4j-slf4j-impl + log4j-core

在Spring Boot中我们应当去除LogBack依赖后使用jul-to-slf4j + slf4j-api + log4j-slf4j-impl + log4j-core

但是Spring Boot提供了更好的选择spring-boot-starter-log4j2

从maven官网中我们可以看到它集成了log4j-slf4j-impl + log4j-core + log4j-jul + jul-to-slf4j



三、解决报错

本文编辑于2021-12-11

第一个报错No SLF4J providers were found

原因是slf4j-api、jcl-over-slf4j版本不对,用了2.0.0-alpha5,应该用1.7.32

第二个报错Failed to load class "org.slf4j.impl.StaticLoggerBinder

原因是从maven官网复制的配置含有<scope>test</scope>,应该改为<scope>compile</scope>

这些报错如果按报错提示的链接去官网查看的话,都是要求引入一堆依赖进项目,但其实并不是解决根本问题,反而会以为引入混乱的依赖导致最后写日志的不是log4j2了



四、log4j2配置文件

配置文件名为log4j2.xml,放在resources文件夹下



标签:spring,boot,slf4j,报错,JCL,日志,log4j2,log4j
来源: https://www.cnblogs.com/yunmuq/p/15674936.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有