如何在java中记录/跟踪对象的任何方法调用

时间:2011-08-29 18:29:54

标签: java methods call logging trace

我需要一些像Python装饰器的东西。我需要存储一些信息,特别是调用的方法,它的开始时间,结束时间和参数。我无法导入Java 1.5库之外的任何内容。是否有一些像Python中可用的东西?

6 个答案:

答案 0 :(得分:6)

Java的良好跟踪工具是BTrace

答案 1 :(得分:2)

您可以使用Java Management Extensions或java代理尝试一些分析器。

请参阅http://java.sun.com/developer/technicalArticles/releases/j2se15/#mnm

答案 2 :(得分:2)

答案 3 :(得分:0)

不,Python装饰器不允许您监视所有代码而不更改任何内容。您仍然需要将装饰器放在任何地方(并且 - 基本上 - 将每个函数包装到一个执行计数的函数中)。

我不确定我是否理解你的要求(你没有说你是否需要生产或测试的代码;而且,“不要导入任何东西”的要求是奇怪的:你的所有类都在默认包中吗?是您是否允许使用IDE和编译器?),但我认为最简单的方法是使用Javassist(cschooley提供的第二个链接是一个完美的介绍),但不要使用代理:而是使用CtClass #write( )检测类文件并将其保存到磁盘(可能在自定义ant任务中)。这样最终的构建就不需要任何特殊的设置了。

答案 4 :(得分:0)

如果您只能依赖接口方法,那么您可能会使用Java Proxy类。

答案 5 :(得分:0)

来自@Loggable

jcabi-aspects注释和AspectJ方面可能会对您有所帮助。注释所有方法,每次调用它们时,SLF4J都会收到日志消息:

@Loggable(Loggable.DEBUG)
public String load(URL url) {
  return url.openConnection().getContent();
}

jcabi-aspects的下一个版本中,将实现类的完整记录:https://github.com/yegor256/jcabi/issues/129