Spring全家桶中的日志框架

spring-jcl

spring-jcl是spring的日志框架,spring-jcl底层使用的日志框架是有优先级的优先级为:LOG4J2 级是最高的,其次是SLF4J (>=1.3)、SLF4J(<1.3)、JUL

根据spring-jcl中的LogAdapter可以得知,选择哪个日志框架是根据优先级来选定底层的日志框架的。

当项目里面没有其他日志框架时,默认使用Java提供的JUL(java.util.logging包)。

private static final String LOG4J_SPI = "org.apache.logging.log4j.spi.ExtendedLogger";private static final String LOG4J_SLF4J_PROVIDER = "org.apache.logging.slf4j.SLF4JProvider";private static final String SLF4J_SPI = "org.slf4j.spi.LocationAwareLogger";private static final String SLF4J_API = "org.slf4j.Logger";private static final LogApi logApi;static {if (isPresent(LOG4J_SPI)) {if (isPresent(LOG4J_SLF4J_PROVIDER) && isPresent(SLF4J_SPI)) {// log4j-to-slf4j bridge -> we'll rather go with the SLF4J SPI;// however, we still prefer Log4j over the plain SLF4J API since// the latter does not have location awareness support.logApi = LogApi.SLF4J_LAL;}else {// Use Log4j 2.x directly, including location awareness supportlogApi = LogApi.LOG4J;}}else if (isPresent(SLF4J_SPI)) {// Full SLF4J SPI including location awareness supportlogApi = LogApi.SLF4J_LAL;}else if (isPresent(SLF4J_API)) {// Minimal SLF4J API without location awareness supportlogApi = LogApi.SLF4J;}else {// java.util.logging as defaultlogApi = LogApi.JUL;}
}

spring-boot-starter-logging

spring-boot-starter-logging是spring boot的一个默认日志启动器,许多spring-boot启动器中都使用spring-boot-starter-logging作为日志实现,让你可以快速在spring-boot中引入的日志功能,而不用选择Java默认提供的JUL。

许多的springboot启动器都使用了spring-boot-starter-logging,如:spring-boot-starter,spring-boot-starter-web

spring-boot-starter-logging底层使用logback做为底层日志框架,spring-boot-starter-logging本身并没有实现日志功能,只不过是导入了一系列的日志API和logback日志框架

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId><version>2.2.5.RELEASE</version>
</dependency>

spring-boot-starter-log4j2

如果你想在springboot中使用log4j2,可以使用spring-boot-starter-log4j2去导入log4j2。

如果你想替换掉spring-boot-starter的默认日志框架,可以通过导入spring-boot-starter-log4j2,移除spring-boot-starter-logging来实现底层框架的更换。

更换spring-boot-starter底层日志框架时,记得移除spring-boot-starter-logging,否则Lombok会抛出Class path contains multiple SLF4J bindings警告。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>2.2.5.RELEASE</version><!--移除spring-boot-starter-logging--><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions>
</dependency><!--导入spring-boot-starter-log4j2-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId><version>2.5.4</version>
</dependency>

springboot项目中使用Lombok的slf4j

如果你在springboot项目中使用Lombok的@Slf4j注解来生成log类,那么默认使用的是spring-boot-starter-logging里面的logback。(以为spring-boot-starter默认引入logback)

当项目存在多个slf4j日志接口的实现框架,会抛出Class path contains multiple SLF4J bindings警告。此时应该要主要是否引入复数的slf4j日志接口的实现框架。

Spring全家桶中的日志框架相关推荐

  1. Java Spring全家桶详解——Spring简介

    今天新开一个专栏,专门讲解Spring全家桶的知识点,我会用通俗易懂的话讲解晦涩难懂的原理,并搭配代码演示,让大家快速入门 废话不多说,今天我们先学习Spring全家桶中的第一个框架:Spring 如 ...

  2. Spring全家桶,永远滴神!

    对于Java工程师来说,几乎没有没听过大名鼎鼎的Spring框架的,Spring框架早已成为了Java后端开发事实上的行业标准,可以说,是Spring成就了Java,Spring也成为Java程序员必 ...

  3. 这是我见过最完整的Spring全家桶学习笔记,没有之一!

    耗时将近一个月,终于赶在金九银十,学完了Spring全家桶系列.梳理了下整个过程,总结了一套经验和学习方法,分享给有需要的各位. 首先说一下,为什么我要花这么多时间,下功夫来恶补Spring全家桶? ...

  4. 【2022年Spring全家桶】学习路线图和资料整理

    前言 对于Java工程师来说,几乎没有没听过大名鼎鼎的Spring框架的,Spring框架早已成为了Java后端开发事实上的行业标准,可以说,是Spring成就了Java,Spring也成为Java程 ...

  5. Spring全家桶小册,源码实战都有

    对于Java工程师来说,几乎没有没听过大名鼎鼎的Spring框架的,Spring框架早已成为了Java后端开发事实上的行业标准,可以说,是Spring成就了Java,Spring也成为Java程序员必 ...

  6. 拿下Spring全家桶后,我跳槽了

    耗时将近一个月,终于赶在金九银十,学完了Spring全家桶系列.梳理了下整个过程,总结了一套经验和学习方法,分享给有需要的各位. 首先说一下,为什么我要花这么多时间,下功夫来恶补Spring全家桶? ...

  7. mybatis中文文档_成神之路!缓存+MyBatis+MySQL+Spring全家桶+分布式技术实战合集

    最近花了很长的时间去搜罗Java核心技术好文,我把每个Java核心技术的优选文章都整理成了一个又一个的文档.昨天也是终于全部整理好了,今天就把这些东西分享给老铁们,也能为老铁们省去不少麻烦,想学什么技 ...

  8. osgi框架和spring区别_最全153道Spring全家桶面试题,你都知道哪些?(含答案解析)...

    前言 Spring 框架自诞生以来一直备受开发者青睐,有人亲切的称之为:Spring 全家桶. 毋庸置疑,Spring 早已成为 Java 后端开发的行业标准,无数的公司选择 Spring 作为基础的 ...

  9. Redis+Nginx+设计模式+Spring全家桶+Dubbo阿里P8技术精选文档

    最近花了很长的时间去搜罗Java核心技术好文,我把每个Java核心技术的优选文章都整理成了一个又一个的文档.昨天也是终于全部整理好了,今天就把这些东西分享给老铁们,也能为老铁们省去不少麻烦,想学什么技 ...

最新文章

  1. html的vue项目怎么兼容ie,vue 项目在ie浏览器的兼容问题
  2. Aizu 2224 Save your cats
  3. 给php权限,PHP实现权限管理功能的方法
  4. C++ vector容器中用erase函数和迭代器删除重复元素问题分析
  5. 选取文档元素的API
  6. POJ 3087 Shuffle'm Up (模拟+map)
  7. Linux学习笔记-匿名和命名管道读写的相同点及不同点
  8. 什么是气泡图?怎样用Python绘制?怎么用?终于有人讲明白了
  9. java和python的优势_Java和Python哪个更好?解读Python对比其他语言的优势
  10. 使用tensorflow实现机器学习中的线性拟合
  11. 支付签约_已成燎原之势!蜻蜓支付出库、签约、地推火爆!
  12. 读《编程的数学原理》
  13. R语言使用cor.test函数检验两个数值向量之间的相关性系数是否具有统计显著性、对相关性系数进行显著性检验、基于pearson相关性检验
  14. 通过wvdial完成4G自动拨号上网
  15. mysql脏数据_mysql的刷脏
  16. 图像分割目标检测论文集锦
  17. 18级计算机应用基础期中考试题,早安正能量 励志新开始---法学与社会学学院18级新生开展早自习活动...
  18. FME将用SHP数据对栅格影像数据进行裁剪
  19. 给一段下雪的代码。。。
  20. 无监督学习 聚类分析②

热门文章

  1. 《中秋书月》月圆之夜,我和德鲁克
  2. linux 下转换UTC到本地时间
  3. android 获得屏幕的大小
  4. 企业核心员工的长期激励计划
  5. 支持向量机—核函数源码分析(2)
  6. IIS 之 线程池最大线程数
  7. ThinkPHP 数据库操作之数据表模型和基础模型 ( Model )
  8. Response.Redirect(x.aspx);跳转后session为null的解决方法
  9. svn文件重进更改服务器路径,svn 设置 服务器路径
  10. php插入word图片,如何在PHPOffice / PHPWord模板上添加/设置图像?