我想使用自己的日志记录系统自动跟踪所有java方法的进入和退出。 但是我不想以此污染所有代码。
您知道它是否存在一种在编译时自动添加它的方法吗?
您可能需要检查 AspectJ 和 aspect编程的概念。
面向方面的编程(AOP)是一种编程范式,旨在通过允许跨领域关注点的分离来提高模块化。通过在不修改代码本身的情况下向现有代码添加其他行为(建议)来做到这一点,而是通过“切入点”规范单独指定要修改的代码,例如“在函数名称以'set'开头时记录所有函数调用”。这允许将对业务逻辑不是很重要的行为(例如日志记录)添加到程序中,而不会使功能的核心代码混乱。 AOP为面向方面的软件开发奠定了基础。
这是AspectJ project页。
在综合中,您将能够定义编译器在注释处理时间处需要在何处插入其他日志代码。
例如:
@Pointcut("call(* aspects.trace.demo.*.*(..))")
public void traceMethodsInDemoPackage() {}
这将包括对带有任何参数的那些包中的任何类的所有调用。 在切入点定义之后,您可以指定以下建议:
@Before("traceMethodsInDemoPackage()")
public void beforeTraceMethods(JoinPoint joinPoint) {
// trace logic ..
}
您将能够通过JointPoint界面访问实际参数和其他对象。
请注意,尽管输入/输出操作可能很昂贵,所以您将需要通过非常特定的切入点来平衡要记录的信息量。
希望这会有所帮助。
干杯!
,您可以使用以下提到的步骤: