gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:50:40 24 4
gpt4 key购买 nike

在 Java 中记录堆栈跟踪:

new Throwable.printStackTrace()

查看Hibernate发出的SQL语句, set show_sql to true .

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

我看了 interceptors and event listeners ,并且它们似乎都没有在查询级别提供 Hook 。

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

我也许可以试试 logging jdbc driver ,但我不清楚调用者的堆栈是否会被正确保留。

我可以 rewrite byte code ,但这似乎过分了。

编辑 : 我也可以试试 AspectJ建议SQL执行方法。

有没有人做过这个?最好的方法是什么?

最佳答案

我最终将一个新的日志 Appender 附加到 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。

关于sql - 每当 Hibernate 发出 SQL 查询时,如何记录堆栈跟踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12147308/

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