SpringBoot中的日志框架
文章目录
本文介绍常用SpringBoot日志框架的整合,本笔记为博主在学习某互联网视频教程时所记,供大家参考
1、常用日志框架有
日志门面(日志的抽象层) | 日志的实现 |
---|---|
JCL (Jakarta Commons Logging) SLF4J(Simple Logging Facade for java) jboss-logging | Log4j JUL(java.util.logging) Log4j2 Logback |
我们只需要选一个日志门面和一个日志的实现即可
SLF4J、log4j、logback出自同一个人之手
SpringBoot:底层是Spring框架,Spring框架默认使用的是JCL
SpringBoot选用slf4j和logback
1.1、开发的原则
在开发的过程中应该优先选择使用接口的API,而不是选用实现类的;
给系统中导入slf4j的jar和logback的jar
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");
}
}
1.2、SLF4J框架的实现
每个日志的实现框架都有自己的配置文件。使用slf4j以后,配置文件还是做成日志实现框架自己本身的配置文件
1.3、SLF4J的统一
对于一个系统引用了多个日志实现的情况,我们需要统一的转换才行
例如:Spring中用的是commons-logging,Hibernate用的是jboss-logging,这个时候就需要统一转成slf4j,然后再使用我们的jar进行转换即可
图示:
如何让系统中所有的日志都统一到slf4j
1、将系统中其他日志框架先排除出去;
2、用中间包来替换原有的日志框架
3、我们导入slf4j其他的实现
2、SpringBoot的日志关系
2.1、SpringBoot的日志关系
SpringBoot 使用
spring-boot-starter-logging
作为日志框架;
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
<version>2.3.9.RELEASE</version>
<scope>compile</scope>
</dependency>
1)、SpringBoot底层将所有的日志实现,最终都转换为了slf4j-api;然后再使用logback进行实现
2)、SpringBoot默认使用的是logback进行日志实现,也就是
springboot+logback
模式3)、查看依赖关系: IDEA->pom.xml->右键->Diagrams->show Dependencies
2.2、总结
1、Spring Boot选用的是SLF4J和Logback进行日志记录
2、 Spring Boot也把其他的的日志都替换成了slf4j。可以查看替换包的源码,偷梁换柱!
3、如果我们要引入其他框架,一定要把这个框架的日志包移除掉,如下Spring Boot框
架依赖中就把Sping框架依赖的commons-logging依赖排除掉了。
3、日志的输出
3.1、日志的级别
由低到高
trace < debug < info < warn < error,
我们可以增加测试代码,验证默认的日志级别,如下:
package com.example.demo;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class DemoApplicationTests {
Logger logger = LoggerFactory.getLogger(DemoApplicationTests.class);
@Test
void contextLoads() {
logger.trace("trace追踪信息");
logger.debug("debug调试信息");
logger.info("info日志信息");
logger.warn("warn警告信息");
logger.error("error报错信息");
}
}
我们查看控制台的输出,如下:
可以发现,默认的日志级别是info级别的
3.2、修改日志的级别
1)、我们可以通过修改
application.properties
配置文件的方式,调整默认的日志级别2)、修改成功后的级别,默认只打印当前级别和当前级别高级的日志级别
3)、我们尝试将日志的级别调整为
trace
,如下:
# 修改日志的级别为trace
logging.level.com.example.demo=trace
查看我们的运行结果:
3.3、日志的输出路径
我们可以通过修改
application.properties
文件的方式,自定义日志的文件输出说明:logging.file的优先级大于logging.path
logging.file | logging.path | Example | Description |
---|---|---|---|
none | none | 只在控制台输出 | |
指定文件名 | none | my.log | 输出日志到my.log文件 |
none | 指定目录 | /var/log | 输出到指定目录的spring.log文件中 |
打开源码,我们可以看到logback的默认配置,会输出到指定路径的spring.log文件中
3.4、日志的配置
官方的配置说明:
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-logging
给类路径下放上每个日志框架自己的配置文件即可,加载配置时会判断,如我们使用自己
的配置文件,Spring Boot就不会使用它自己的默认配置:
Logging System | Customization |
---|---|
Logback | logback-spring.xml , logback-spring.groovy , logback.xml , or logback.groovy |
Log4j2 | log4j2-spring.xml or log4j2.xml |
JDK (Java Util Logging) | logging.properties |
官方推荐 logback-spring.xml的命名配置文件。
logback.xml:直接被识别为日志配置文件
logback-spring.xml 可以使用springProfile的高级特性
如下:
<springProfile name="staging">
<!-- configuration to be enabled when the "staging" profile is active -->
</springProfile>
<springProfile name="dev | staging">
<!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
</springProfile>
<springProfile name="!production">
<!-- configuration to be enabled when the "production" profile is not active -->
</springProfile>
<springProperty scope="context" name="fluentHost" source="myapp.fluentd.host"
defaultValue="localhost"/>
<appender name="FLUENT" class="ch.qos.logback.more.appenders.DataFluentAppender">
<remoteHost>${fluentHost}</remoteHost>
...
</appender>