SpringBoot日志的使用
市面上的日志框架有:JUL(java.util.logging)、JCL(jakarta common logging)、SLF4J(Simple Logging Facade for Java)、log4j、logback、jboss-logging、log4j2等等
日志门面(日志的抽象层) | 日志实现 |
---|---|
SLF4J、jboss-logging、JCL | JUL、log4j、logback、log4j2 |
SpringBoot底层是Spring框架,Spring框架默认使用JCL
SpringBoot默认选择SLF4J和logback
在SpringBoot应用中使用日志记录时,应该使用抽象层的方法,
使用案例:
/**
* 导入slf4j的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");
}
}
使用SLF4J的图示
每个日志实现都有自己的日志配置文件,因此虽然使用SLF4J,但是配置文件还是要遵循实现日志框架的配置文件标准。
在SpringBoot应用中,常常会整合第三方框架,而第三方框架采用的日志框架又不是统一的,那么如何在整个应用中只采用使用一种日志框架而又不影响第三方框架的正常使用呢?
- 将系统中其他日志框架先排除出去
- 用中间包替换原有的日志框架
- 再导入SLF4J其他的实现
SpringBoot的日志关系
总结:
1.SpringBoot底层使用slf4j和logback来进行日志记录
2.SpringBoot把其他的日志都替换成lslf4j
3.中间包都转换成了slf4j的日志工厂
4.如果引入了第三方的框架,一定要把这个框架的默认日志依赖排除掉
例如:Spring框架使用的commons-logging的日志记录,在SpringBoot中有如下操作:
直接将Spring框架的依赖排除掉,再使用转换包中的同名的日志(已经换成slf4j)来补充缺失的日志依赖,以保证Spring框架的正常使用
SpringBoot能自动适配所有的日志,并且底层使用了slf4j+logback实现日志记录,引入其他框架时,只需要将这个框架依赖的日志框架排除掉即可!!!
Demo
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Test
public void logTest() {
//获取logger记录器
Logger logger = LoggerFactory.getLogger(getClass());
//日志的级别 由低到高:trace<debug<info<warn<error
//可以调整输出的日志级别,日志就会在这个级别及以后的高级别输出
logger.trace("这是trace日志。。。。");
logger.debug("这是debug日志。。。。");
//SpringBoot默认调整的是info级别
logger.info("这是info日志。。。。");
logger.warn("这是warn日志。。。。");
logger.error("这是error日志。。。。");
}
也可以在application.properties配置文件中对日志进行相关的配置
#配置日志输出级别,在com.gabo包下,默认是root(info)
logging.level.com.xxx = trace
#不指定路径会在当前项目的根目录下生成springboot.log日志记录文件
#指定路径,会在指定位置生成对应的日志文件
#logging.file=D://springboot.log
#在当前磁盘的根路径下创建spring文件夹和里面的log文件夹,使用spirng.log作为默认文件
logging.path=/spring/log
#在控制台输出的日志的格式
#logging.pattern.console=%date{yyyy-MM-dd HH:mm:ss}] [%thread] %-5level %logger{50} - %msg%n
#在指定文件中的日志输出的格式
#logging.pattern.file=%date{yyyy-MM-dd HH:mm:ss} ========= [%thread] ================= %-5level %logger{50} ==== %msg%n
在SpringBoot应用中一般会在resources目录下建一个logback.xml,里面配置了相关的日志内容,而SpringBoot官方还推出了logback-spring.xml的日志配置文件,那么这两种命名有什么区别呢?
<!--当日志配置文件使用logback.xml
当日志配置文件使用logback-spring.xml时,可以使用高级特性springProfile,在不同环境下配置不同的日志打印格式
-->
<!--在开发环境下使用这种格式进行输出-->
<springProfile name="dev">
<Pattern>[%date{yyyy-MM-dd HH:mm:ss}] --- [%-5level] [%logger:%line] --%mdc{client} %msg%n</Pattern>
</springProfile>
<springProfile name="!dev">
<!-- %.-1level 只显示信息级别的首字母,%-5level 左对齐显示信息级别全称,级别从左显示5个字符宽度 -->
<Pattern>[%date{yyyy-MM-dd HH:mm:ss}] ==== [%-5level] [%logger:%line] --%mdc{client} %msg%n</Pattern>
</springProfile>
切换日志框架
- 可以参照slf4j的官网提供的slf4j的适配图,进行相关的配置
假如从slf4j+logback切换成slf4j+log4j,那么首先需要在原始的配置中将logback依赖和替换log4j的依赖排除掉
接着
最后再创建一个log4j.properties日志配置文件即可