gpt4 book ai didi

java - 仅记录当前线程/ session 的 Hibernate SQL 的最简单方法

转载 作者:行者123 更新时间:2023-12-02 08:06:20 26 4
gpt4 key购买 nike

我正在寻找最简单的方法来跟踪 Hibernate 生成的 SQL 查询的执行时间。不幸的是,它不能以传统方式完成 - 仅通过设置 show_sql 或 hibernate logger,因为受监控的应用程序在生产环境中是多线程的,并且 sql 时间跟踪应该只针对一项服务进行,这是有问题的。服务是指在 Spring 应用程序中运行的某些组件。但就我而言,可以肯定地说,它是线程 - 线程在调用期间不会更改。服务实现是一种Java方法,该方法调用其他方法、组件等,所有内容都在一个线程中。我可以更改一种方法源并部署它,但我无法发布应用程序。不幸的是,AspectJ 不能按原样使用,因为我无法更改整个应用程序、重新编译或将某些内容插入 JVM。不幸的是(接下来)数据库管理员无法打开 sql 查询跟踪 - 他们不知道如何做到这一点。请帮忙,如何在不挖掘整个应用程序的情况下调整 Hibernate 执行?最简单的方法是什么?

事实:Hibernate 3.x、Spring 2.x、java 1.5

最佳答案

下面是我的做法,假设您使用 Logback 作为日志框架。

  1. 确保您的 logback 配置启用了扫描:

    <配置debug=“假”扫描=“真”scanPeriod=“30秒”>

  2. 确保您的文件记录器在输出中包含线程名称 (%t):

    <模式>%d{yyyy-MM-dd HH:mm:ss} %-5p %C{1} %t - %m%n

  3. 从关闭 SQL 日志记录开始:

  4. 应用程序启动并运行后,您就可以执行测试了,编辑已部署应用程序的 logback.xml 文件,并将这些级别更改为“DEBUG”。然后执行您的测试。测试完成后,将这些级别设置回“关闭”。

  5. 查看日志输出,并识别感兴趣的线程名称,然后 grep 查找该线程名称:

    grep "thread-1-pool-7"debug.log > sqldebug.log

虽然有点麻烦,但是可以用。

关于java - 仅记录当前线程/ session 的 Hibernate SQL 的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8111722/

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