【问题标题】:logging method calls without an external tool or external library in javajava中没有外部工具或外部库的记录方法调用
【发布时间】:2016-10-10 23:01:35
【问题描述】:

我正在尝试创建一个 java 类,它将记录多线程 java 程序的方法调用我已经有了可以将信息保存到桌面文件中的部分,但我还没有设法找到获取方法调用。我尝试过使用 Runtime.getRuntime().traceMethodCalls(true) 并使用 Thread.getAllStackTraces().values() 并遍历 StackTraceElement。 访问https://github.com/NamelessSuperCoder/Class-Debugging.git 查看我当前的代码。请告诉我应该做些什么来改进以及如何使我的课程有效。

【问题讨论】:

    标签: java multithreading debugging logging


    【解决方案1】:

    如果不逐个方法或不使用外部工具逐个编写日志语句,可能无法记录所有方法调用。完成该任务的最简单方法可能是使用 AspectJ 之类的工具进行面向方面的编程。事实上,我什至找到了一篇关于如何做到这一点的文章,http://www.yegor256.com/2014/06/01/aop-aspectj-java-method-logging.html。您也许可以使用所有类的代理来构建自己的工具。

    【讨论】:

    • 还有其他方法吗?因为我似乎无法让 AspectJ 在我当前的 wpilib java 项目上工作
    【解决方案2】:

    在您的其他类中引用您的日志记录类。将日志记录类设置为单例,因此只有一个实例。给它一些接受要放入日志的字符串的方法,然后从其他类的方法中调用日志类中的方法...

    class Logger {
    
        static addLogEntry(String logEntry) {
            // some method to add log entry to your log
        }
    }
    
    
    class Foo {
    
        Logger aLogger;
    
        public Foo() {
            // get your singleton Logger instance
            aLogger = getLogger();
        }
    
        public void someMethodInThisClass() {
            aLogger.addLogEntry("in someMethodInSomeClass");
        }
    
    
    }
    

    可能是一种更优雅的方式,但应该可以。

    【讨论】:

    • 这不是我想要的我想要一个在运行时可以获取所有方法调用并将它们保存在文件中的类。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多