Java调试消息/日志,指示输入了哪个类或方法

时间:2017-06-13 13:51:08

标签: java debugging logging refactoring

我目前必须处理现有的Java应用程序,在该应用程序中,我可以将some.java文件过滤为完整的死代码,从而删除它们。 问题在于没有任何评论或其他提示,这些类不是用于生产目的,调用层次结构令人困惑,写这篇文章的人当然已经消失了。

我只是通过在代码中手动放置System.out.println调试消息来发现,这表明构造函数或方法是否已被占用。如果它是一个在运行时被实例化的类,那就相当好了,因为那样我就可以放置一个

public class public TestObjectClass
{
    public TestObjectClass(String whatever) // this is the constructor
    {
        System.out.println("Constructor of class " + getClass() + " entered");
        /* some other code folowed */
    } // end constructor
} // end class

如果日志没有指出这条消息,我知道整个类从未使用过,那么就不需要在所有方法中放置调试语句(这些类中没有静态方法)。

但是有些类没有使用新语句创建对象,因此没有明确的构造函数。因此,我必须在每种方法中放置以下内容,以便找出是否使用

public class ClassThatIsNotInstantiated
{
    public void someMethodXYZ()
    {
        System.out.println("someMethodXYZ in " + getClass + " is entered.");
        /* some other code followed */
    } // end method
 } // end class

这可以更轻松,更方便吗?

我当然想到了Logger类,它至少表明指针当前在哪个类中......

  1. 如果类名是runnable .jar,则不表示类名 例如由詹金斯执行
  2. 我找不到用Logger指示方法
  3. 的方法
  4. 同样使用Logger,我必须在每个中放置一条this.logger消息 方法,至少我不知道其他可能性。

2 个答案:

答案 0 :(得分:2)

LOG4J可以做到这一点。将PatternLayout与“C”和“M”转换模式一起使用。但是要小心 - 它们会达到性能(尤其是方法名称 - 获取方法名称 - 捕获异常)。更多信息: https://logging.apache.org/log4j/2.x/manual/layouts.html

但在你的情况下,使用方面可能更好。检查AspectJ。它允许您为每个执行的方法打印日志

答案 1 :(得分:1)

如前所述,您可以使用AOPAspectJ自动注入调试语句。

否则,您可以使用UCDetector

之类的工具