gpt4 book ai didi

Hibernate - 在异常期间记录 sql 和所有参数

转载 作者:行者123 更新时间:2023-12-04 04:07:59 25 4
gpt4 key购买 nike

如何让 hibernate 在抛出异常时完整记录所有细节?我希望看到完整的(未截断的)sql 和完整的(未截断的)参数。

即 Hibernate 正在抛出:

Caused by: org.hibernate.exception.DataException: could not execute statement
long stack trace
Caused by: java.sql.SQLDataException: Incorrect string value:
Query is: blah blah blah ...

我不想在那里看到任何“...”。我想查看完整 sql 和完整 参数列表。

这是一个未经检查的异常。完整记录此(以及任何其他 hibernate 异常)所需的配置是什么?

因为这是生产代码,所以我不想将 jdbc 驱动程序更改为 net.sf.log4jdbc.DriverSpy

(为清楚起见,省略了截断的 sql + 参数)

最佳答案

您可以使用 p6spy图书馆。

<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>3.9.0</version>
</dependency>

我们的想法是使用 p6spy 代理包装您用于 Hibernate 的数据源,它会在您配置时记录所有内容。

如果你使用 Hikari 池,它可能看起来像下面的代码:

DataSource ds = new P6DataSource(new HikariDataSource(dsConfig));

p6spy 的配置位于 spy.properties 文件中,该文件应该位于类路径的根目录中(在 jar 文件的根目录中)。

这里是spy.properties的例子:

# suppress inspection "UnusedProperty" for whole file
#appender=com.p6spy.engine.spy.appender.StdoutLogger
appender=com.p6spy.engine.spy.appender.Slf4JLogger
excludecategories=info,debug,result,resultset
logMessageFormat=com.p6spy.engine.spy.appender.CustomLineFormat
customLogMessageFormat=%(category) | connection %(connectionId) | \u001b[33m%(sqlSingleLine)\u001b[0m | %(executionTime) ms

如您所见,可以配置 p6spy 使用所选附加程序写入日志的方式。

如果一切配置正确,您会在日志中看到 SQL 查询和相应的参数。

关于Hibernate - 在异常期间记录 sql 和所有参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62194713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com