java - 如何在 Spring Boot 项目中使用 Log4jdbc 记录 SQL 查询、它们的参数和结果?

标签 java sql spring-boot logging spring-data-jpa

要查看发送到数据库的 SQL 查询,我们通常使用 showSql 参数:

spring.jpa.showSql=true

它允许我们看到语句体但看不到它的参数:

insert into master (id, version, name) values (null, ?, ?)

尤其是我们看不到查询结果。

有没有办法在应用程序日志中查看 SQL 语句及其参数和结果?

最佳答案

JDBC 日志记录

log4jdbc-spring-boot-starter 我们可以轻松地记录所有 JDBC 语句,以及它们在 Spring Boot/Spring Data JPA 项目中的参数和结果。

例如,当我们在应用程序中执行一些 JPQL 查询时:

select u from User u where u.name = 'john'

然后我们在应用程序日志中看到以下 SQL 查询及其参数:

select ... from users users0_ where users0_.name='john'

及其表格形式的结果:

|---|---------|
|id |name     |
|---|---------|
|1  |john     |
|---|---------|

要使用这个启动器,我们必须将它的依赖添加到我们的项目中:

<dependency>
    <groupId>com.integralblue</groupId>
    <artifactId>log4jdbc-spring-boot-starter</artifactId>
    <version>1.0.2</version>
</dependency>

并将这些参数添加到application.properties:

logging.level.jdbc.resultsettable=info
logging.level.jdbc.sqltiming=info
logging.level.jdbc.sqlonly=fatal
logging.level.jdbc.audit=fatal
logging.level.jdbc.resultset=fatal
logging.level.jdbc.connection=fatal

此外,我们可以添加这些 log4jdbc 参数以在一行中获取输出:

log4jdbc.dump.sql.addsemicolon=true
log4jdbc.dump.sql.maxlinelength=0
log4jdbc.trim.sql.extrablanklines=false

关于java - 如何在 Spring Boot 项目中使用 Log4jdbc 记录 SQL 查询、它们的参数和结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45346905/

相关文章:

sql - 如何快速检测并解决数据库的SQL Server索引碎片?

java - Spring Security 跨源

java - 为什么我不能为这个 Socket 类提供构造函数参数?

java - Linux,java.lang.UnsatisfiedLinkError : no "library file" in java. library.path

java - 无法使用 setValueAt() 编辑我的 JTable 数据

mysql - 具有多个条件的 SQL group by

java - JDBC:如何在准备好的语句中执行功能?

mysql - 只在表为空时插入

java - MySQL密码包含 '=' Spring Boot密码错误问题

java - 在本地创建 spring 和 nodejs 应用程序之间的 SSL 连接