当前位置: 首页 > 面试题库 >

如何自动记录Java中方法的进入/退出?

梁和颂
2023-03-14
问题内容

现在,我正在使用java.util.logging日志记录Java项目中每个方法的入口点和出口点。调试时,这对我非常有用。

在每种方法的开头我都有这段代码,在结尾处有类似的代码:

if (logger.isLoggable(Level.FINER)) {
    logger.entering(this.getClass().getName(), "methodName");
}

其中“ methodName”是方法的名称(硬编码)。

所以我想知道是否有一种方法可以自动执行此操作,而不必在每个方法中都包含此代码。


问题答案:

我建议使用面向方面的编程。

例如,使用AspectJ编译器(可以将其集成到Eclipse,Emacs和其他IDE中),您可以创建如下代码:

aspect AspectExample {
    before() : execution(* Point.*(..))
    {
         logger.entering(thisJoinPointStaticPart.getSignature().getName(), thisJoinPointStaticPart.getSignature().getDeclaringType()   );

    }

    after() : execution(* Point.*(..))
    {
         logger.exiting(thisJoinPointStaticPart.getSignature().getName() , thisJoinPointStaticPart.getSignature().getDeclaringType()  );

    }
}

在执行“ Point”类中的所有方法之后和之前,此方面将添加日志记录代码。



 类似资料:
  • 本文向大家介绍Android使用Theme自定义Activity进入退出动画的方法,包括了Android使用Theme自定义Activity进入退出动画的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android使用Theme自定义Activity进入退出动画的方法。分享给大家供大家参考,具体如下: 有没有觉得Activity的默认动画太快了或者太难看了。。 我原来使用Activi

  • 问题内容: Java中的关键字可用于中断循环或switch语句。有什么可以用来打破方法的吗? 问题答案: 使用关键字退出方法。 从上面链接到的Java教程: 任何声明为void的方法都不会返回值。它不需要包含return语句,但是可以这样做。在这种情况下,可以使用return语句从控制流块中分支出来并退出该方法,其用法如下:

  • 问题内容: 我有一个带有数据库调用的类,并且我通常想用log4j记录该类中每个被调用的方法(带有参数): 是否可以自动执行此操作?也许通过在每种方法的开头使用某种注释,而不是编写每个logger.debug? 今天,每次更改参数或方法名称时,我都必须更新我的logging.debug。 问题答案: 从jcabi- aspects 尝试注释和AspectJ 方面(我是开发人员): 所有方法调用均通过

  • 问题内容: Sphinx默认情况下不会为__init __(self)生成文档。我尝试了以下方法: 和 在conf.py中,设置以下内容只会将__init __(self)文档字符串附加到类文档字符串(Sphinx autodoc文档 似乎同意这是预期的行为,但未提及我要解决的问题): 问题答案: 这是三种选择: 为了确保始终记录在文档中,可以在conf.py中使用。像这样: def setup(

  • 问题内容: 我已连接到,并且想要输入一些内容,以便它退出其中的方法。 码: 我想输入并返回主类方法。 该方法使用a 输出数据。 问题摘要:我尝试调用return;但它不会返回方法main(),我该如何解决? 问题答案: 基本上,您需要的是某种模式对话框,通过该对话框,您可以有效地在显示对话框的那一点上暂停程序的执行,直到关闭(关闭)该对话框为止,然后继续执行… 有关更多详细信息,请参见如何制作对话

  • 问题内容: 如何使用Python的文档字符串使用参数记录方法? 编辑: PEP 257给出了这个例子: 这是大多数Python开发人员使用的约定吗? 我期待一些更正式的东西,例如 环境 :Python 2.7.1 问题答案: 根据我的经验,numpy的文档字符串公约(PEP257超集)是最广泛的传播 遵循 惯例,它们也通过工具,如支持的狮身人面像。 一个例子: