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

Hibernate-在异常期间记录sql和所有参数,hibernate,exception,Hibernate,Exception,当抛出异常时,如何让hibernate完全记录所有详细信息? 我希望看到完整(未截断)sql和完整(未截断)参数 ie 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 bla

当抛出异常时,如何让hibernate完全记录所有详细信息? 我希望看到完整(未截断)sql和完整(未截断)参数

ie 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
p6spy
3.9.0
其思想是将用于Hibernate的数据源包装为p6spy代理,该代理在配置时记录所有内容

如果使用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如何使用所选的appender写入日志

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

通常,(…)用于指示堆栈跟踪中的重复日志行,请尝试增加值

-XX:MaxJavaStackTraceDepth
JVM参数

使用调试器并捕获未处理的异常?您从未在生产环境中工作过,是吗?您从未在生产环境中使用过调试器?祝你好运因为它无论如何都会崩溃,所以您可以使用。然后你可以用你拥有的部分字符串进行搜索。我不能放慢我的搜索速度,希望捕获随机发生的一次性用户错误。这是一个捕获到的异常,prod实例没有崩溃和烧录,因此崩溃转储也不可行。请添加到您当前的
hibernate.properties
hibernate.cfg.xml
(或等效)设置以及用于hibernate的日志记录类型(例如log4j)和日志记录级别。