基于Instrumentation的Java日志记录框架

时间:2011-11-28 20:58:42

标签: java logging bytecode instrumentation

我正在尝试追踪我的一个Java项目中的问题,而且我目前面临着必须手动将 lot 的日志记录语句添加到一大堆方法中的可能性。你可能已经明白了,我不是很喜欢这个想法:

  • 这些方法中的大多数都是性能关键的,我不想在不需要时添加日志记录,即使它像log4j一样轻量级。

  • 在某些情况下,我想从Java库中记录类的操作。虽然OpenJDK源代码可用,但我将为此提供我自己的Java库版本。

  • 我对在特定条件下记录特定代码路径感兴趣。虽然我可以集中进行日志记录适用性检查,但如果我需要修改条件,我仍然可以预见将来会发生无法预料的重构。

  • 添加日志记录语句 en-mass 需要批次的工作和时间,我宁愿更高效地使用它。

考虑到存在字节码操作库,例如JavassistBCEL,我希望可能有一个日志框架可以将繁重的工作从我手中夺走。

由于我主要对记录方法调用参数和在特定条件下返回值感兴趣,是否有一个基于检测的Java日志框架可以让我这样做?最好是比Java agents更现代,更不尴尬的东西?

2 个答案:

答案 0 :(得分:2)

日志记录是面向方面编程的“hello world”。

如果您已经是Spring用户,那么您将能够编写一个方面类来记录您想要的内容,然后以声明方式将其编织到所有需要它的对象中。

Spring有自己的AOP实现;它还支持AspectJ。

如果您愿意,可以在没有Spring的情况下使用AspectJ。

答案 1 :(得分:0)

试试这个开源工具:http://code.google.com/p/perfspy/。它是运行时日志记录,性能监视和代码检查工具。它使用ApsectJ在运行时编织应用程序代码,并记录每个方法的执行时间及其输入参数和值。它有一个UI应用程序,您可以在其中查看方法调用及其输入和返回值作为树。有了它,您可以发现性能瓶颈并理解复杂的代码流。