SpringBoot打印sql日志(附动态修改日志级别)

项目运行报错时,查看sql日志是非常好的排查手段,以前在spring框架下往往都是通过修改日志级别为DEBUG然后重启再次运行才生效,那么SpringBoot如何修改呢?

SpringBoot的spring-boot-starter依赖默认已经包含日志依赖,其默认使用的日志框架为logback,且默认的日志级别均为INFO,若不配置日志输出路径,默认日志信息打印在控制台。为了打印sql日志信息,我们只需把对应dao包下的日志级别改为DEBUG即可,在yaml配置文件中配置如下:

logging:
  level:
    # Map格式,前者为对应的路径或是进程 后者为日志级别
    activitiTest.activitiTest.dao: debug

上图这种是针对本地测试或是临时修改,毕竟DEBUG级别下打印的日志会非常多,倘若生产环境下使用该级别会造成大量的垃圾日志信息,因此项目运行时一般不会这么干,所以需要在项目运行时动态修改其日志级别(无需重启),使之输出sql日志

 

SpringBoot动态修改日志级别

1、首先引入对应的监控工具依赖,其中包含有日志端点监控:



    org.springframework.boot
    spring-boot-starter-actuator

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日志打印出:

你可能感兴趣的:(springboot,数据库)