java异常堆栈信息过滤
来源:互联网 发布:天气预报js代码 编辑:程序博客网 时间:2024/05/21 09:02
java代码中捕获异常后可以简单通过ex.printStackTrace()打印出异常堆栈跟踪信息。但实际应用中经常需要通过log4j将日志打印到日志文件中,若直接使用ex.printStackTrace()会在每行堆栈信息前后加入log4j的格式,既有垃圾信息,又影响美观,可以采用获取所有的堆栈信息后一次打印的方法来优化。
/** * 获取完整的堆栈信息 * @param ex * @return */public static String getStackTrace(Throwable ex){if (ex == null){ return "";}StringWriter sw = null;PrintWriter out = null;String stackTraceInfo = "";try{ sw = new StringWriter(); out = new PrintWriter(sw); ex.printStackTrace(out); stackTraceInfo = sw.toString();}catch (Exception e){ logger.error(e.getMessage());}finally{ if (sw != null) {try{ sw.close();}catch (Exception e2){ logger.error(e2.getMessage());} } if (out != null) {try{ out.close();}catch (Exception e2){ logger.error(e2.getMessage());} }}return stackTraceInfo;}
不过美中不足的是,分析堆栈信息发现,多数情况下,在调用自己写的代码之前会调用不少所引用组件的代码,这些堆栈信息完全是多余的,有些碍眼,在分析了Throwable类的堆栈打印方法后,写了两个比较笨的方法来满足这个需求。
/** * 获取有用的堆栈信息 * @param ex * @return */public static String getStackTraceInfo(Throwable ex){if (ex == null){ return "";}StringBuffer stackTraceInfo = new StringBuffer(ex.toString());StackTraceElement[] astacktraceelement = ex.getStackTrace();for (int i = 0, size = astacktraceelement.length; i < size; i++){ String tmp = astacktraceelement[i].toString(); // 只获取指定包的下的异常堆栈跟踪信息 if (tmp.startsWith("com.lu")) {stackTraceInfo.append("\r\n\tat ").append(tmp); } else {break; }}return stackTraceInfo.toString();} /** * 获取指定深度的堆栈信息 * @param ex * @param depth 堆栈跟踪深度 * @return */public static String getStackTraceInfo(Throwable ex, int depth){if (ex == null){ return "";}StringBuffer stackTraceInfo = new StringBuffer(ex.toString());StackTraceElement[] astacktraceelement = ex.getStackTrace();// 取指定深度与堆栈深度中小的值int size = depth > astacktraceelement.length ? astacktraceelement.length : depth;for (int i = 0; i < size; i++){ stackTraceInfo.append("\r\n\tat ").append(astacktraceelement[i]);}return stackTraceInfo.toString();}
- java异常堆栈信息过滤
- java 取得异常堆栈信息
- Java获取异常的堆栈信息
- java打印异常中的堆栈信息
- 获得Java异常的堆栈信息
- java:获取异常的堆栈信息
- 异常堆栈信息
- Java获取异常的堆栈信息到String的方式
- slf4j如何打印java异常堆栈信息throwable对象
- 打印java异常堆栈信息到日志文件
- Java日志出现异常,但没有完整的堆栈信息
- java.lang.NullPointerException--jvm堆栈异常信息丢失问题
- 异常日志没有堆栈信息
- 根据exception 异常堆栈信息
- NullPointerException丢失异常堆栈信息
- java堆栈信息打印
- 查看java堆栈信息
- 获取java堆栈信息
- 一步一步实现MFC扩展DLL中导出类和对话框
- JS作用域链
- MooseFS分布式文件系统安装向导
- JQuery Mobile入门——外部页面链接
- 如何去写一个gem
- java异常堆栈信息过滤
- babyos (十) —— 通过IO端口读取硬盘扇区
- 希望这次可以坚持下去吧
- 双指针
- 分布式文件系统(DFS)打造数据冗余及自动备份
- MFC Tab Control控件的详细使用
- EJB3.0学习笔记---JMS/MDB/Pub/Sub/P2P
- mysql change table charset and collation
- moosefs安装