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