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