Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当Hibernate发出SQL查询时,如何记录堆栈跟踪?_Sql_Hibernate_Logging - Fatal编程技术网

当Hibernate发出SQL查询时,如何记录堆栈跟踪?

当Hibernate发出SQL查询时,如何记录堆栈跟踪?,sql,hibernate,logging,Sql,Hibernate,Logging,在Java中记录堆栈跟踪: new Throwable.printStackTrace() 要查看Hibernate发出的SQL语句,请执行以下操作: 但是,如何在每次发出SQL查询时记录堆栈跟踪?我想将其用于性能监控(即查找源代码中生成查询最多的部分) 我看了一下,它们似乎都没有在查询级别给出一个钩子 我还查看了源代码(SQLStatementLogger、Loader)。我没有看到任何钩子 我也许可以尝试一个新的方法,但我不清楚调用方的堆栈是否会被正确保存 我可以,但那似乎太过分了 编辑:

在Java中记录堆栈跟踪:

new Throwable.printStackTrace()
要查看Hibernate发出的SQL语句,请执行以下操作:

但是,如何在每次发出SQL查询时记录堆栈跟踪?我想将其用于性能监控(即查找源代码中生成查询最多的部分)

我看了一下,它们似乎都没有在查询级别给出一个钩子

我还查看了源代码(SQLStatementLogger、Loader)。我没有看到任何钩子

我也许可以尝试一个新的方法,但我不清楚调用方的堆栈是否会被正确保存

我可以,但那似乎太过分了

编辑:我还可以尝试建议SQL执行方法


有人这样做过吗?最好的方法是什么?

我在hibernate 3.6.8中的org.hibernate.jdbc.util.SQLStatementLogger(没有其他类)使用的org.hibernate.SQL记录器上附加了一个新的日志追加器

Logger logger = Logger.getLogger("org.hibernate.SQL");
org.apache.log4j.rolling.RollingFileAppender appender =
    new org.apache.log4j.rolling.RollingFileAppender();
appender.setLayout(new SqlLogLayout());
// .. set appender options ..
appender.activateOptions();
logger.addAppender(appender);
然后在我的SqlLogLayout中,我可以获得堆栈跟踪,以及从日志消息中获得的SQL