Springboot+JPA打印SQL日志过程

 更新时间:2025年08月07日 08:36:39   作者:左边的天堂  
文章说明在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语句和查询参数

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java线程的联合用法实例分析

    Java线程的联合用法实例分析

    这篇文章主要介绍了Java线程的联合用法,结合实例形式分析了java线程联合的原理、实现方法及相关操作技巧,需要的朋友可以参考下
    2019-10-10
  • Java基础之finally语句与return语句详解

    Java基础之finally语句与return语句详解

    这篇文章主要介绍了Java基础之finally语句与return语句详解,文中有非常详细的代码示例,对正在学习java基础的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • IDEA2024下安装kubernetes插件配置进行使用的方法

    IDEA2024下安装kubernetes插件配置进行使用的方法

    IDEA中默认已安装Kubernetes插件,若未发现,可在市场下载,安装后,需准备config文件和kubectl.exe,进行路径配置,可在Workloads-prod下查看和下载目标容器日志,本文介绍IDEA2024下安装kubernetes插件并配置进行使用,感兴趣的朋友一起看看吧
    2024-11-11
  • 微信小程序中的openid的作用详解

    微信小程序中的openid的作用详解

    微信小程序作为连接用户与服务的重要桥梁,在提升用户体验方面发挥着重要作用,本文章将详细探讨openid在微信小程序中的作用及其重要性,帮助开发者更好地理解和利用这一功能,优化应用体验并增强安全性,感兴趣的朋友一起看看吧
    2025-04-04
  • spring boot的拦截器简单使用示例代码

    spring boot的拦截器简单使用示例代码

    这篇文章主要介绍了spring boot的拦截器简单使用实例代码,需要的的朋友参考下吧
    2017-04-04
  • Java实现经典捕鱼达人游戏的示例代码

    Java实现经典捕鱼达人游戏的示例代码

    《捕鱼达人》是一款以深海狩猎为题材的休闲竞技游戏。本文将利用Java实现这一经典的游戏,文中采用了swing技术进行了界面化处理,需要的可以参考一下
    2022-02-02
  • Java SpringBoot快速集成SpringBootAdmin管控台监控服务详解

    Java SpringBoot快速集成SpringBootAdmin管控台监控服务详解

    这篇文章主要介绍了如何基于springboot-admin管控台监控服务,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-09-09
  • Java实现注册邮箱激活账户实例代码

    Java实现注册邮箱激活账户实例代码

    本篇文章主要介绍了Java实现邮箱激活账户实例代码,这里整理了详细的代码,具有一定的参考价值,有需要的小伙伴可以参考下。
    2017-07-07
  • Java 自定义错误类示例代码

    Java 自定义错误类示例代码

    以下是对Java中自定义错误类的示例代码进行了介绍。需要的朋友可以过来参考下
    2013-08-08
  • Classloader隔离技术在业务监控中的应用详解

    Classloader隔离技术在业务监控中的应用详解

    这篇文章主要为大家介绍了Classloader隔离技术在业务监控中的应用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08

最新评论