• Java获取异常堆栈信息


        /*
        * 只能获取单层异常信息 无法获取caused by
        * */
        public String getExceptionStack(Throwable e){
    
            StackTraceElement[] stackTraceElements = e.getStackTrace();
            String prefix = "Exception in thread "+"""+Thread.currentThread().getName()+"" ";
            String result = prefix+e.toString() + "
    ";
            int lenth = stackTraceElements.length - 1;
            for (int i = 0;i<=lenth;i++){
                String err = stackTraceElements[i].getClassName()+"."+stackTraceElements[i].getMethodName()+"("+stackTraceElements[i].getFileName()+"."+stackTraceElements[i].getLineNumber()+")";
                result = result + "	at "+err+"
    ";
    
            }
            
            return result;
        }
     /*
        * 获取Caused by  参数num要初始化为0 参数hashset要为空hashset
        * */
        public String getExceptionStack(Throwable e, HashSet<String> set,int num){
    
            StackTraceElement[] stackTraceElements = e.getStackTrace();
            String prefix = "";
            if (num == 0){
                prefix = "Exception in thread "+"""+Thread.currentThread().getName()+"" ";
            } else {
                prefix = "Caused by: ";
            }
            String result = prefix+e.toString() + "
    ";
            int lenth = stackTraceElements.length - 1;
            for (int i = 0;i<=lenth;i++){
                String err = stackTraceElements[i].getClassName()+"."+stackTraceElements[i].getMethodName()+"("+stackTraceElements[i].getFileName()+"."+stackTraceElements[i].getLineNumber()+")";
                if (set.contains(err)){
                    continue;
                }
                set.add(err);
                result = result + "	at "+err+"
    ";
    
            }
    
            Throwable t = e.getCause();
    
            String cause = "";
            if (t!=null){
                num++;
                cause = getExceptionStack(t,set,num);
            }
            
            return result + cause;
        }
  • 相关阅读:
    资源汇总
    最近面试经历
    Screen Space Ambient Occlusion
    实时渲染下的多线程协作:实践
    High Dynamic Range
    Deferred Shading
    实时渲染下的多线程协作
    9.了解四个相等判断的用法
    14.使用构造函数链
    16.垃圾最小化
  • 原文地址:https://www.cnblogs.com/scorates/p/11253540.html
Copyright © 2020-2023  润新知