怎么打印sql语句
时间: 2025-06-21 07:28:07 浏览: 26
### logback-spring.xml 配置打印 SQL 语句示例
为了实现通过 `logback-spring.xml` 打印 SQL 语句的功能,通常需要结合 MyBatis 或 Hibernate 等 ORM 框架的日志配置。以下是详细的配置方法和解释。
---
#### 1. **MyBatis 配置打印 SQL**
如果项目中使用的是 MyBatis 作为持久层框架,可以通过以下方式配置 `logback-spring.xml` 和 `application.yml` 来打印 SQL 语句。
##### (1)`logback-spring.xml` 配置
```xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">
<!-- 定义日志路径 -->
<property name="LOG_PATH" value="./logs"/>
<!-- 控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- 文件输出 -->
<appender name="FILE_SQL" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/sql.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/archived/sql-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>7</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
</encoder>
</appender>
<!-- 设置全局日志级别 -->
<root level="info">
<appender-ref ref="CONSOLE"/>
</root>
<!-- 针对 MyBatis 的日志级别设置 -->
<logger name="com.ruoyi.mapper" level="DEBUG" additivity="false"> <!-- 替换为实际 Mapper 包路径 -->
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE_SQL"/>
</logger>
<logger name="org.mybatis.spring" level="DEBUG" additivity="false">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE_SQL"/>
</logger>
</configuration>
```
##### (2)`application.yml` 配置
```yaml
logging:
config: classpath:logback-spring.xml
level:
com.ruoyi.mapper: DEBUG # 替换为实际 Mapper 包路径
org.mybatis.spring: DEBUG
```
---
#### 2. **Hibernate 配置打印 SQL**
如果项目中使用的是 Hibernate 作为持久层框架,同样可以通过类似的配置来打印 SQL 语句。
##### (1)`logback-spring.xml` 配置
```xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">
<!-- 定义日志路径 -->
<property name="LOG_PATH" value="./logs"/>
<!-- 控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- 文件输出 -->
<appender name="FILE_HIBERNATE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/hibernate.sql.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/archived/hibernate.sql-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>7</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
</encoder>
</appender>
<!-- 设置全局日志级别 -->
<root level="info">
<appender-ref ref="CONSOLE"/>
</root>
<!-- 针对 Hibernate 的日志级别设置 -->
<logger name="org.hibernate.SQL" level="DEBUG" additivity="false">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE_HIBERNATE"/>
</logger>
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" additivity="false">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE_HIBERNATE"/>
</logger>
</configuration>
```
##### (2)`application.yml` 配置
```yaml
logging:
config: classpath:logback-spring.xml
level:
org.hibernate.SQL: DEBUG
org.hibernate.type.descriptor.sql.BasicBinder: TRACE
```
---
#### 关键点解析
1. **Mapper 包路径**
- 对于 MyBatis,需明确指定 Mapper 接口所在的包路径(如 `com.ruoyi.mapper`),并将该包的日志级别设为 `DEBUG`[^1]。
2. **SQL 绑定参数**
- 若要打印 SQL 中的具体绑定参数值,除了开启 `org.hibernate.SQL` 外,还需额外启用 `org.hibernate.type.descriptor.sql.BasicBinder` 并将其日志级别设为 `TRACE`[^2]。
3. **日志文件分离**
- 建议将 SQL 日志与其他业务日志分开存储,以便后期排查问题更加高效。
4. **性能注意事项**
- 开启 SQL 打印会增加一定的性能开销,建议仅在开发或调试阶段启用此功能,在生产环境下关闭不必要的日志输出。
---
###
阅读全文
相关推荐













