java - 如何识别哪个类正在调用特定方法?

标签 java logging

假设我们有一个抽象类,它有一个打印警告日志条目的方法(警告:无法设置 header 。响应已经提交),这个方法被类 X 多次调用(它正在淹没日志) .

根据从应用服务器生成的日志条目,我设法识别了抽象类并找到了它的 jar(使用 jarscan),JAR 是应用服务器的 OOTB 组件,因此它不应该是任何意义上的修改。我破解了 JAR 并在生成日志条目的方法中引入了一行:

new Exception().printStackTrace()

这种方法应该给我堆栈跟踪来识别类 X。

但是,我不知道如何在我的测试环境中重现这个错误,我的工作区中有很多项目没有,我不能只检查数百个类来确定哪个是在响应对象中设置一些东西,我试图在日志条目时间戳和针对测试环境运行的 Selenium 测试报告之间找到匹配项,但它没有显示在日志中。

问题:在不对出现问题的环境进行任何侵入性更改的情况下,识别 X 类的良好故障排除方法是什么?

最佳答案

如果由于特定环境而无法使用调试器,则可以调查加载到服务器 JVM 中的类,并找到从抽象类继承的类。

运行 jvisualvm 并连接到服务器的 JVM,然后转到 jvisualvm 中的 OQL 控制台并运行这样的查询:

select heap.findClass("com.xyz.my.AbstractClass").subclasses()

这将找到当前加载的抽象类的所有子类。

关于java - 如何识别哪个类正在调用特定方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26038532/

相关文章:

logging - NLog v2可以与Common.Logging一起使用吗

python - 使用 Fabric 和 Python 进行日志记录

logging - 观察或监控远程使用应用程序的用户

java改变hashmap的值

Java 写操作 io_append io_write

java - 使用 Thin Driver 设置扫描关闭

java - 如何让记录器包裹在 slf4j 中?

c# windows-services - 如何处理日志记录异常?

java - Android 初学者 : Email and Strings

java - Volley 发布请求中的 JSON 格式无效