日志输出sql 2020-03-14 16:15 ### 永久修改 > 项目启动就生效,一直打印sql,但是正常情况下打印日志太多,不建议使用 项目运行报错时,查看sql日志是非常好的排查手段,以前在spring框架下往往都是通过修改日志级别为DEBUG然后重启再次运行才生效,那么SpringBoot如何修改呢? SpringBoot的spring-boot-starter依赖默认已经包含日志依赖,其默认使用的日志框架为logback,且默认的日志级别均为INFO,若不配置日志输出路径,默认日志信息打印在控制台。为了打印sql日志信息,我们只需把对应dao包下的日志级别改为DEBUG即可,在yaml配置文件中配置如下: ```yml logging: level: # Map<String, String>格式,前者为对应的路径或是进程 后者为日志级别 activitiTest.activitiTest.dao: debug ``` 上图这种是针对本地测试或是临时修改,毕竟DEBUG级别下打印的日志会非常多,倘若生产环境下使用该级别会造成大量的垃圾日志信息,因此项目运行时一般不会这么干,所以需要在项目运行时动态修改其日志级别(无需重启),使之输出sql日志 ### 临时修改 > 动态修改,项目启动后不打印,想打印了再打印 1、首先引入对应的监控工具依赖,其中包含有日志端点监控: ```xml <!-- springBoot监控工具 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> ``` 2、在yaml中配置如下: ```yml # 配置端点信息 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,会看到以下输出信息: ```json { "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,请求体如下: ```json { "configuredLevel": "DEBUG" } ``` 此时已经修改完毕,可直接访问controller层,查看日志信息,此时已有sql日志打印出。 ### 日志级别 大范围的日志级别优先级从高到低: ERROR、WARN、INFO、DEBUG。 (4种) 选择info级别的话,就会打印error, warn, info类型的日志 选则debug级别的话,就会打印error, warn, info, debug类型的日志 细分级别:off, error, warn, info, debug, trace, all。共7种 ```java public static final int OFF_INT = Integer.MAX_VALUE; public static final int ERROR_INT = 40000; public static final int WARN_INT = 30000; public static final int INFO_INT = 20000; public static final int DEBUG_INT = 10000; public static final int TRACE_INT = 5000; public static final int ALL_INT = Integer.MIN_VALUE; ``` --END--
发表评论