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

标签 java debugging logging refactoring

我目前必须处理现有的 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 类,它至少表明指针当前在哪个类中......

  1. 如果它是可运行的 .jar,则不指示类名 例如由 Jenkins 执行
  2. 我还找不到用 Logger 指示方法的方法
  3. 对于 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/

相关文章:

java - 简单的 UML OOP 风格的软件规划工具?

c++ - 在没有 ASLR 的情况下寻找(内存,GC 相关的)heisenbug 消失

c++ - 具有进程间通信功能的服务器-客户端日志记录体系结构。您知道解决方案吗?

iOS:如何从 URL 调试 "freshly launching"应用程序

xcode - 如何在调试器中查看值?

java - Mongodb Java 驱动程序不断记录消息,如何禁用它?

java.util.logging : file handler with append and count properties

Java android激光条码扫描器

java - 异常处理模式

java - UTF 到 ASCII 的转换