我目前必须处理现有的 Java 应用程序,在该应用程序中我可以过滤掉一些 .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
如果日志没有指示此消息,我知道整个类从未使用过,则没有必要在所有方法中放置调试语句(这些类中没有静态方法)。
但是有些类没有使用 new 语句创建对象,因此没有显式构造函数。因此,我必须在每个方法中放置以下内容才能查明它是否被使用
public class ClassThatIsNotInstantiated
{
public void someMethodXYZ()
{
System.out.println("someMethodXYZ in " + getClass + " is entered.");
/* some other code followed */
} // end method
} // end class
这可以做得更简单、更方便吗?
我当然想到了 Logger 类,它至少表明指针当前在哪个类中......
- 如果它是可运行的 .jar,则不指示类名 例如由 Jenkins 执行
- 我还找不到用 Logger 指示方法的方法
- 对于 Logger,我还必须在每个中放置一条 this.logger 消息 方法,至少我不知道其他的可能性。
最佳答案
LOG4J 可以做到这一点。将 PatternLayout 与“C”和“M”转换模式一起使用。但要小心 - 它们会影响性能(尤其是方法名称 - 为了获取方法名称,它们会抛出捕获异常)。更多信息: https://logging.apache.org/log4j/2.x/manual/layouts.html
但就您而言,使用方面可能是更好的主意。检查 AspectJ。它允许您打印每个执行方法的日志
关于Java 调试消息/日志,指示输入了哪个类或方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44523531/