springboot slf4j配置_Spring Boot学习03_日志使用原理

本文详细介绍了SpringBoot的日志配置选择,包括SLF4J和Logback的选用原因,以及如何通过中间包解决不同框架日志实现的统一问题。SpringBoot默认使用SLF4J+Logback,并通过log4j-to-slf4j中间包替换其他日志实现。此外,还讲解了如何在SpringBoot中自定义日志级别和输出路径,以及如何通过logback-spring.xml实现环境切换的日志配置。
摘要由CSDN通过智能技术生成

一、Spring Boot的默认日志

市面上的日志框架;

JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j....

如果仅仅只有一个日志框架的话,中途要换日志框架,我们就得修改代码,维护修改非常麻烦,所以就像JDBC---数据库驱动,使用一个统一接口层,再对其接口进行实现,这样的话我们用的时候只需要使用接口层中的API,要用哪种的日志框架,直接换对应的实现jar就可以了。

日志门面(日志接口层)

JCL(Jakarta Commons Logging) :2014年就没更新了,舍弃。

jboss-logging :只有一些特定的框架在用,一般用不着,舍弃。

SLF4j(Simple Logging Facade for Java):选用SLF4j

日志实现

Log4j :有性能问题,舍弃。

Logback:与log4j,slf4j出自同一人之手,为了解决Log4j的问题,重新写了一个框架可以使

用这个

JUL(java.util.logging) :Java防止日志市场全部被Log4j抢占,勉强出个这个抵抗下,舍弃

Log4j2:与Log4j没有任何关系,只是借它之名,很好的一个日志框架,但是很多框架没有适

配起来,舍弃。

所以最后我们选用的组合是SLF4j + Logback。Spring Boot使用的也是该组合

SLF4j的使用:这里引用官网的一张图

最下面第一个就是抽象层;第二个就是日志实现,第三个是适配层,第四个还是实现。

因为log4j与JUL出现的时候太早了,那时候还没有SLF4j,所以要写一个适配层的jar包,上面实现SLF4j,使用下面jar包的API,起到承上启下的作用。

66cd0176076ef5cf7917d3f6061b6a06.png

二、遗留的问题

在我们使用框架开发的时候,它们使用的框架都是不同的,SLF4j也给出了对应的解决方案

401df893273e36f4defa3d0ea86410f3.png

我们就拿第一个来解释:

我们的项目接口层用的是SLF4J,想让项目中所有的日志输出都使用logback,但是别的框架使用的日志框架有commons logging,log4j,java util logging,如果把它们删了的话,框架运行就会报错(比如Spring框架使用的日志框架就是commons logging),SLF4J使用了与之对应的狸猫换太子包,拿第一个来说jcl-over-slf4j.jar来说,这个jar包内部中的包名和类名与commons logging众的包名类名都是一样的,但是其实现却是使用SLF4J的API,这样的话,我们到时候使用就可以把commons logging.jar给排除,然后引入jcl-over-slf4j.jar,就可以实现所有的日志输出就是logback

总结

如何让系统中所有的日志都统一到slf4j;

1、将系统中其他日志框架先排除出去;

2、用中间包来替换原有的日志框架;

3、我们导入slf4j其他的实现;

三、Spring Boot中的日志

1、Spring Boot使用它来做日志功能

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

底层依赖关系(Spring boot 2.1.2使用了log4j-to-slf4j替换了之前的log4j-over-slf4j)

Spring Boot底层也是使用SLF4J + logback做日志

使用中间包(狸猫换太子包)把其他的日志换成了SLF4J

b4967d3fb73bd47aa70a3d2df984f12a.png

2、日志使用

2.1、说明Spring Boot的默认日志级别是info

6a580b2833177a38389aa4a32ab69bf2.png

2.2、可以通过全部配置文件修改日志级别,输入的格式,默认没有日志文件输出,也可以

在全局配置文件中指定输出文件目录或者路径

下面测试了日志文件的输出位置,控制台打印日志的格式,文件中的日志格式,日

志级别

2985e7c293ff8f09a57a53418c573e53.png

a81a215b8d811530de9e88b9f77af4b5.png

2.3、默认配置在spring-boot-2.1.2.RELEASE.jar这个包下

c4c1bd8b5c6b955c0fe4be56616ed3f4.png

在这里指定了默认的日志文件在哪和日志级别的确是info

753805cb6d09a167d49c038ee1adbc51.png

2.4、在classpath路径加入logback.xml,SpringBoot就不使用它的默认配置了,这样命

命名会跳过Spring Boot的检测,Spring Boot推荐logback-spring.xml命名方式,

这样可以在里面加<springProfile name="环境名称"></springProfile>标签,这

样就可以根据不同的环境来切换不同的配置了。

此时不是dev的环境所以是下面的格式

1c81c0eceaca1da96dad43e0b87a27f4.png

在命令行启动的时候指定环境dev,就是上面这种格式了

7d13c5c805188cbd9cacf7dfc13f0fdd.png

2dc400e50ecbd676185624a1f3218df6.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值