JPA日志级别设置
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
现在流行使用Mybatis,之前历史遗留项目有用到JPA,但是日志信息中打印了很多不需要的信息,无法关闭,所以大致去了解了下,网上很多乱七八糟的信息,经常答非所问,所以我自己去查询了下,给大家一些参考.
提示:以下是本篇文章正文内容,下面案例可供参考
一、需求
一般存在如下slq日志打印需求,一是将sql日志打印出来,二是打印周边的数据库信息.
二、使用步骤
1.设置sql打印
有好几种配置方式,有使用properties,有使用yml,有使用xml的,其实大同小异,这边简单介绍下yml格式的情况.
yam文件下配置基础日志级别信息:
logging:
level:
root: info
数据库信息配置:
spring:
jpa:
database: MySQL
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
show-sql: false
hibernate:
ddl-auto: update
注意通过show-sql配置为true即可显示sql信息.
2.结合SLF4J
现在大部分时候日志信息都集成slf4j
配置如下(可直接复制使用):
<!--默认配置-->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!--配置控制台(Console)-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoder的默认实现类是ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern>
</encoder>
</appender>
<!--配置日志文件(File)-->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--设置策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件路径:这里%d{yyyyMMdd}表示按天分类日志-->
<FileNamePattern>${LOG_HOME}/%d{yyyyMMdd}/${APP_NAME}.log</FileNamePattern>
<!--日志保留天数-->
<MaxHistory>15</MaxHistory>
</rollingPolicy>
<!--设置格式-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<!-- 或者使用默认配置 -->
<!--<pattern>${FILE_LOG_PATTERN}</pattern>-->
<charset>utf8</charset>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>100MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 多环境配置 按照active profile选择分支 -->
<!--root节点 全局日志级别,用来指定最基础的日志输出级别-->
<root level="ERROR">
<appender-ref ref="FILE"/>
<appender-ref ref="STDOUT"/>
</root>
<logger name="org.hibernate.dialect" level="ERROR"/>
总结
笔者在打印数据库日志信息时,主要遇到两个坑:
1、一个工程下,其中一个子模块的日志信息始终不打印,而debug根据log4j中发现其实日志级别和日志信息都在,唯独不展示出来,新增控制台的配置即可
2、方言信息始终显示,尝试多种方式关闭无效,加上配置即可。