获取在特定线程中执行的方法的名称

时间:2013-03-27 15:07:42

标签: java trace

在我的Java应用程序中,我希望获得在特定线程中执行的不同方法的名称(和实际的运行时类)。它的不同之处在于获得常规的堆栈跟踪。它就像我在观察者看着我的程序的执行,并看到不同方法的名称在运行时出现。

一种(天真且实际上不可行)的方法是在每种方法的开头放置一条打印消息来打印其名称(类,行号等)。我可以使用异常跟踪来获取要打印的所有相关信息,但是我必须在每个方法的开头添加至少一行,这不是很优雅。此外,如果我错过/忘记在任何方法的开头添加一行,则不会显示该方法名称。此外,这种策略不是面向未来的。是否有任何仪器/其他技术可以帮助我实现这一目标。

2 个答案:

答案 0 :(得分:1)

您应该了解面向方面的编程以及实现它的所有框架。

如果您使用的是弹簧,您可以查看完全符合您要求的简单跟踪拦截器:http://static.springsource.org/spring/docs/1.2.9/api/org/springframework/aop/interceptor/SimpleTraceInterceptor.html

答案 1 :(得分:1)

除了AOP和下面另一个答案中提到的Spring Listener之外,您可以使用一些棘手的代码生成框架,例如ASM或CGLib。您将编写代码以在运行时重写每个类,并在方法的开头附加这些打印指令。但这需要更深入的字节码知识。