Java工具类---打印方法调用轨迹


在学习java日志体系的源码时,看到了一段有趣的代码。

参照java.util.logging.LogRecord 542 private void inferCaller()

编写一个打印方法调用轨迹的工具类(实际工作中使用Debug)

public class StackTraceUtil {
    /**
     * 在想要显示调用轨迹的方法中加入StackTraceUtil.showStackTrace();
     */
    public static void showStackTrace(){
        JavaLangAccess access= SharedSecrets.getJavaLangAccess();
        Throwable throwable = new Throwable();
        int depth=access.getStackTraceDepth(throwable);
        System.out.println("--------------------showStackTrace:sort[Method][Class][LineNumber]--------------------------");
        for (int i=depth-1;i>0;i--){//从1开始不显示当前工具类调用
            StackTraceElement ste=access.getStackTraceElement(throwable,i);
            for(int j=1;j<depth-i;j++){
                System.out.print("\t");//缩进
            }
            System.out.println(String.format("%d[%s()][%s][%s]",i,ste.getMethodName(),ste.getClassName(),ste.getLineNumber()));
        }
        System.out.println("--------------------showStackTrace:sort[Method][Class][LineNumber]--------------------------");
    }
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM