项目运行报错时,查看sql日志是非常好的排查手段,以前在spring框架下往往都是通过修改日志级别为DEBUG然后重启再次运行才生效,那么SpringBoot如何修改呢?
SpringBoot的spring-boot-starter依赖默认已经包含日志依赖,其默认使用的日志框架为logback,且默认的日志级别均为INFO,若不配置日志输出路径,默认日志信息打印在控制台。为了打印sql日志信息,我们只需把对应dao包下的日志级别改为DEBUG即可,在yaml配置文件中配置如下:
logging:
level:
# Map<String, String>格式,前者为对应的路径或是进程 后者为日志级别
activitiTest.activitiTest.dao: debug
上图这种是针对本地测试或是临时修改,毕竟DEBUG级别下打印的日志会非常多,倘若生产环境下使用该级别会造成大量的垃圾日志信息,因此项目运行时一般不会这么干,所以需要在项目运行时动态修改其日志级别(无需重启),使之输出sql日志
SpringBoot动态修改日志级别
1、首先引入对应的监控工具依赖,其中包含有日志端点监控:
<!-- springBoot监控工具 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2、在yaml中配置如下:
# 配置端点信息
management:
endpoints:
# 关闭所有默认为true的端点
enabled-by-default: false
web:
exposure:
# 由于health端点在启动时无法扫描MongoConfig类中的mongoTemplate实例,因此此处去掉该端点 这里只留日志端点 使用post请求访问/actuator/loggers/端点名(先通过get请求访问/actuator/loggers获取所有端点名)
# 请求体为{"configuredLevel": "DEBUG"},即可打印sql日志
include:
- loggers
# 端点访问路径 默认即为/actuator
# base-path: /actuator
endpoint:
loggers:
enabled: true
# 端点端口配置,默认与服务端一样
# server:
# port:
3、由于本文只是为了修改日志级别,因此只配了loggers端点,一般项目中往往还需要info和health端点用以监控,下面启动项目,然后使用get请求访问/actuator/loggers,会看到以下输出信息:
{
"levels":[
"OFF",
"ERROR",
"WARN",
"INFO",
"DEBUG",
"TRACE"
],
"loggers":{
"ROOT":{
"configuredLevel":"INFO",
"effectiveLevel":"INFO"
},
"com":{
"configuredLevel":null,
"effectiveLevel":"INFO"
},
"com.caiyi":{
"configuredLevel":null,
"effectiveLevel":"INFO"
}
...
}
}
4、开始修改日志级别,使用post请求访问,例如:/actuator/loggers/com.caiyi,请求体如下:
{
"configuredLevel": "DEBUG"
}
此时已经修改完毕,可直接访问controller层,查看日志信息,此时已有sql日志打印出: