Springboot+JPA打印SQL日志过程
作者:左边的天堂
文章说明在Spring Boot项目中配置Lombok插件、application.yml和logback.xml,以实现从前端接收活动名称参数,并输出SQL语句及查询参数用于调试
Springboot+JPA打印SQL日志
pom.xml 添加lombox插件
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
application.yml 配置
# Spring spring: #配置 Jpa jpa: show-sql: true #打印执行的sql语句,false则不打印sql properties: hibernate: ddl-auto: none dialect: org.hibernate.dialect.MySQL5InnoDBDialect open-in-view: true
logback.xml 配置
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 日志存放路径 --> <property name="log.path" value="/home/logs" /> <!-- 日志输出格式 --> <property name="log.pattern" value="%d{HH:mm:ss.SSS} %-5level %logger{20}:%line - %msg%n" /> <!-- 控制台输出 --> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${log.pattern}</pattern> </encoder> </appender> <!-- 系统日志输出 --> <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/run-info.log</file> <!-- 循环政策:基于时间创建日志文件 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 日志文件名格式 --> <fileNamePattern>${log.path}/run-info.%d{yyyy-MM-dd}.log</fileNamePattern> <!-- 日志最大的历史 10天 --> <maxHistory>10</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!-- 过滤的级别 --> <level>INFO</level> <!-- 匹配时的操作:接收(记录) --> <onMatch>ACCEPT</onMatch> <!-- 不匹配时的操作:拒绝(不记录) --> <onMismatch>DENY</onMismatch> </filter> </appender> <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/run-error.log</file> <!-- 循环政策:基于时间创建日志文件 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 日志文件名格式 --> <fileNamePattern>${log.path}/run-error.%d{yyyy-MM-dd}.log</fileNamePattern> <!-- 日志最大的历史 60天 --> <maxHistory>10</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!-- 过滤的级别 --> <level>ERROR</level> <!-- 匹配时的操作:接收(记录) --> <onMatch>ACCEPT</onMatch> <!-- 不匹配时的操作:拒绝(不记录) --> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 系统模块日志级别控制,可根据实际情况修改 --> <logger name="com.test" level="info" /> <!-- Spring日志级别控制 --> <logger name="org.springframework" level="warn" /> <!-- JPA日志级别控制,必须这样配置 --> <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" /> <logger name="org.hibernate.SQL" level="info" /> <logger name="org.hibernate.engine.QueryParameters" level="info" /> <!--系统操作日志--> <root level="info"> <appender-ref ref="console" /> <appender-ref ref="file_info" /> <appender-ref ref="file_error" /> </root> </configuration>
效果
Hibernate: select bizactivit0_.id as id1_0_, bizactivit0_.code as code2_0_, bizactivit0_.content as content3_0_, bizactivit0_.create_time as create_t4_0_, bizactivit0_.creator as creator5_0_, bizactivit0_.enabled as enabled6_0_, bizactivit0_.end_time as end_time7_0_, bizactivit0_.name as name13_0_, bizactivit0_.sort as sort16_0_, bizactivit0_.start_time as start_t17_0_, bizactivit0_.status as status18_0_ from biz_activity bizactivit0_ where bizactivit0_.name like ? order by bizactivit0_.id desc limit ? 11:48:38.169 TRACE o.h.t.d.s.BasicBinder:64 - binding parameter [1] as [VARCHAR] - [%活动名称%]
活动名称
是从前端传过来的值,可以看到sql语句和查询参数
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。