SpringBoot系列之日志框架介绍及其原理简介
SpringBoot系列之日志框架介绍及其原理简介
1、常用日志框架简介
市面上常用日志框架:JUL、JCL、jboss-logging、logback、log4j、log4j2、slf4j、etc.
其中日志门面,也是一系列接口api的有slf4j(Simple Logging Facade for Java)、JCL(Jakarta Commons Logging)、jboss-loggin
注意:常用的slf4j等只是一日志门面,是一个日志的抽象层,非日志实现,具体的实现用通过log4j或者logback等框架去实现
2、在项目中使用slf4j
日志调用的,还是建议引入slf4j对应的jar和其实现框架log4j或者logback,然后调用的还是如下进行调用,配好日志实现框架的配置,就可以进行日志跟踪
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(HelloWorld.class);
logger.info("Hello World");
}
}
slf官方手册:slf4j官方手册链接
如图来自slf4j官方的图,图例已经很好的介绍了slf4j的使用场景:
- 如左一图示,直接导slf4j API工程是不能实现日志打印的
- logback的使用,需要导入slf4j API工程和其实现logback-classic.jar、logback-core.jar
- log4j的使用,同样导入slf4j API工程,还要再加比较关键的适配层jar:slf4j-log412.jar,然后log4j.jar才能适配slf4j
- JTL(java util logging)也是通过适配层的slf4j-jdk14.jar先进行适配,然后jtl框架才能正常实现slf4j的api
- etc.
3、系统日志统一到slf4j
ok,学到这里应该有个疑问?在Spring项目中,比如Spring framework框架,Hibernate etc.,这些框架是否有自己的日志实现,很显示,基本每个框架都有自己的日志实现,比如,spring framework就是使用commons-logging进行日志打印的,而Hibernate是通过(jboss-logging)的,etc.,所以这么一堆日志框架堆在一个项目中,是否可以实现统一的日志打印?比如统一到实现slf4j门面
在slf4j官网:http://www.slf4j.org/legacy.html,这个页面已经提供了比较合理的兼容统一实现
如官网的图例所示,主要提供引入一些桥接的jar,比如JCL框架可以引入jcl-over-slf4j.jar
log4j可以引入log4j-over-slf4j
官方说法:
为了简化从JCL到SLF4J的迁移,SLF4J发行版包括jar文件jcl-over-slf4j.jar。该jar文件旨在替代JCL
注意问题:
jcl-slf4j.jar,这个jar需要注意了,使用过程不要和jcl-over-slf4j一起用
jcl-over-slf4j.jar不应与slf4j-jcl.jar混淆
JCL-over-SLF4J(即jcl-over-slf4j.jar)在出于向后兼容性原因而需要支持JCL的情况下非常有用。它可以用于解决与JCL相关的问题,而不必采用SLF4J API,该决定可以推迟到以后。
另一方面,在为组件采用SLF4J API 之后,slf4j-jcl.jar很有用 ,该组件需要嵌入在正式要求JCL的更大的应用程序环境中。您的软件组件仍可以使用SLF4J API,而不会破坏大型应用程序。实际上,slf4j-jcl.jar会将所有日志记录决策委派给JCL,以便您的组件对SLF4J API的依赖关系对于更大的整体而言是透明的。
请注意,不能同时部署jcl-over-slf4j.jar和 slf4j-jcl.jar。前一个jar文件将使JCL将日志记录系统的选择委派给SLF4J,后一个jar文件将使SLF4J将日志记录系统的选择委派给JCL,从而导致无限循环。
ok,对于log4j-over-slf4j.jar使用过程同样注意
log4j-over-slf4j.jar和slf4j-log4j12.jar不能同时存在
slf4j-log4j12.jar的存在(即SLF4J的log4j绑定)将强制将所有SLF4J调用委派给log4j。log4j-over-slf4j.jar的存在将把所有log4j API调用委派给它们的SLF4J等效项。如果两者同时存在,则slf4j调用将委派给log4j,而log4j调用将重定向到SLF4j,从而导致无限循环。
对于这些竟然的jar是如何实现偷梁换柱的?我们可以点开对应的jar,如图所示:这个jar的包名命名都和jcl的一样,目的是实现偷梁换柱,强制不使用jcl的api,而实现slf4j
ok,可以归纳统一项目使用slf4j的过程,首先系统还是用排除其它日志实现jar,然后引入桥接的jar,等覆盖了之后,就可以加上对应的实现jar包,实现日志打印
4、Springboot日志场景启动器
ok,有了前面的知识后,我们可以继续学习Springboot的日志实现了,从前面的知识可以知道,slf4j只是一个日志门面工程,并非实现,在很多项目里都有日志框架混用的情况,针对此种起来,可以加入一些桥接的偷梁换柱jar,然后再加上对应的实现jar就可以
然后Springboot其实也是类似这种实现,首先,Springboot默认使用slf4j作为门面工程,在实现过程也是有用这些偷梁换柱的桥接jar进行slf4j统一,然后再引用logback作为日志实现的jar,先快速创建一个Springboot项目:Springboot系列之快速创建项目教程
创建好项目之后,是默认会引入日志框架的,首先在pom文件,右键->maven->show dependencies显示jar依赖图
如图所示,Springboot的场景启动项目spring-boot-strater集成了spring-boot-strater-logging,spring-boot-strater-logging都是以logback为默认的日志实现框架,当然本博客是以Springboot2.2.1.RELEASE版本为例子的
当然每个版本的实现略有不同,不过基本都一致,给出尚硅谷老师给的图片:
ok,Springboot项目已经对日志做了一个比较好的兼容,还有一个日志jar冲突问题需要注意,因为Springboot项目是统一为slf4j门面的,很显然Springboot在项目实现中就已经做了其它日志jar门面的排除,比如spring项目就已经将jcljar排除了,如图:
所以,在项目使用中,引入其它的jar,都要考虑是否有对应的日志实现jar,要做必要的排除,以免造成jar冲突
ok,这篇博客是对常用日志框架的介绍,有了这些必要的知识之后,就可以实践一下了,详情的可以参数我的博客,SpringBoot系列日志框架使用教程
SpringBoot系列之日志框架介绍及其原理简介的更多相关文章
- SpringBoot系列之日志框架使用教程
目录 1.SpringBoot日志级别 1).日志级别简介 2).默认日志级别 3).配置日志级别 4).日志分组设置 2.SpringBoot日志格式设置 1).默认格式原理简介 2).默认日志格式 ...
- 【SpringBoot】Logback日志框架介绍和SpringBoot整合实战
========================11.Logback日志框架介绍和SpringBoot整合实战 2节课================================ 1.新日志框架L ...
- SpringBoot整合Logback日志框架配置全解析
目录 本篇要点 一.Logback日志框架介绍 二.SpringBoot与Logback 1.默认日志格式 2.控制台输出 3.文件输出 4.日志级别 5.日志组 6.自定义log配置 三.logba ...
- Java常用日志框架介绍
Java常用日志框架介绍 java日志概述 对于一个应用程序来说日志记录是必不可少的一部分.线上问题追踪,基于日志的业务逻辑统计分析等都离不日志.java领域存在多种日志框架,目前常用的日志框架包括L ...
- Java常用日志框架介绍(转)
Java常用日志框架介绍 java日志概述 对于一个应用程序来说日志记录是必不可少的一部分.线上问题追踪,基于日志的业务逻辑统计分析等都离不日志.java领域存在多种日志框架,目前常用的日志框架包括L ...
- 11、Logback日志框架介绍和SpringBoot整合实战 2节课
1.新日志框架LogBack介绍 简介:日志介绍和新日志框架Logback讲解 1.常用处理java的日志组件 slf4j,log4j,logback,common-logging 等 ...
- SpringBoot系列——Logback日志,输出到文件以及实时输出到web页面
前言 SpringBoot对所有内部日志使用通用日志记录,但保留底层日志实现.为Java Util Logging.Log4J2和Logback提供了默认配置.在不同的情况下,日志记录器都预先配置为使 ...
- Spring Boot笔记四:日志框架介绍
我是一名程序员,我喜欢写System.out.println来打印一些重要的信息...后来我学了面向对象,我把这些输出语句整合到了一个工具类里面,可以打印,也可以保存日志. 我是一名积极思考的程序员, ...
- Spring框架介绍和原理
SpringMVC框架介绍 1) Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面. Spring 框架提供了构建 Web 应用程序的全功 ...
随机推荐
- Configuration on demand is not supported by the current version of the Android Gradle plugin since you are using Gradle version 4.6 or above. Suggestion: disable configuration on demand by setting org
androidStudio打开cocos3.17.2Lua项目时,出现了 Configuration on demand is not supported by the current version ...
- 如何使用终端默认情况下阻止Mac应用保存到iCloud
当您保存要在Mac上的Pages,Numbers,TextEdit或其他基于云的应用程序中处理的文档时,该保存的默认位置是iCloud.尽管这对某些人或某些文档来说可能是一件好事,但您可能会厌倦每次更 ...
- java学习路线推荐,希望能帮到你
很多小白刚开始学习java时,肯定迷惘过,因为对java基本是啥也不懂的,一直想知道java的具体学习路线,我曾经也看了许许多多的java经验分享的帖子,评论,以及其他各种培训机构所谓的学习路线,特别 ...
- SpringBoot运行异常时捕获
一.目录展示 二.FirstController 三.ExceptionHandler 捕获异常类 四.效果展示
- Java,该学什么?
本人大学学的是生物技术专业,毕业后入坑Java. 最近有人问我是如何转行的,需要学一些什么.我在网上看到一篇帖子,觉得写得很全.如果是我来写,可能还写不了这么全的.在此分享给网友. 2019秋招几个月 ...
- Java实现自定义注解开发
Java实现自定义注解开发 一直都对注解开发挺好奇的,最近终于有时间自己实践了一把,记录一下 万一后期会用到呢 哈哈哈 首先我们了解一下自定义注解的标准示例,注解类使用 @interface 关键字修 ...
- 朝花夕拾《精通CSS》二、选择器 & 层叠
一.背景 翻出我4年前看的<精通CSS>一书,可惜当初没有整理读书笔记的习惯,最近又很少写前端,遂很多东西.知识点遗忘了,恰且现在 css 也有些变化和进步,遂一起打包整理,输出成几篇 b ...
- sublime插件开发教程1
学习sublime插件开发 好处有很多 比方说微信小程序插件 他官方自带的功能太鸡肋了 可以开发个sublime插件 写智能提示 甩掉微信几条街 sublime插件是用python开发的 所以学习s ...
- Java 添加Word脚注、尾注
Word中的脚注和尾注都是对文本的补充说明.脚注一般是附在书页最左下端的注文,用以解释.说明特定内容:而尾注则是位于文档末尾,用于列出引文的出处.脚注和尾注都可以是针对某些文字或者段落来添加.本文中, ...
- Django之web框架原理
Web框架原理 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. 先写一个 原始的web框架 imp ...