Java异常日志堆栈信息如何打印到日志文件
当我们使用try..catch方法(如下图所示)捕获到异常堆栈信息时,有时候无法打印出具体的错误信息到日志文件,即无法通过抛出的异常迅速定位到问题所在。因此我们需要将异常堆栈信息通过某种方法解析出来,输出完整正确的日志信息。
try{ //do something }catch(Exception ex){ ex.printStackTrace(); }
工作中经常会碰到以上情况,因此我将以上的解决办法抽象出了工具方法,供大家参考调用。
public class ExcpUtil { //打印异常堆栈信息 public static String getStackTraceString(Throwable ex){//(Exception ex) { StackTraceElement[] traceElements = ex.getStackTrace(); StringBuilder traceBuilder = new StringBuilder(); if (traceElements != null && traceElements.length > 0) { for (StackTraceElement traceElement : traceElements) { traceBuilder.append(traceElement.toString()); traceBuilder.append(" "); } } return traceBuilder.toString(); } //构造异常堆栈信息 public static String buildErrorMessage(Exception ex) { String result; String stackTrace = getStackTraceString(ex); String exceptionType = ex.toString(); String exceptionMessage = ex.getMessage(); result = String.format("%s : %s %s", exceptionType, exceptionMessage, stackTrace); return result; } }
运用场景:
Example1:
try { //do something } catch (Exception ex) { logger.info(ex.toString()); logger.info("work exception" + ExcpUtil.getStackTraceString(ex)); }
Example2:
try { //do something } catch (Exception e) { throw new CSException (ErrorCode.DEFAULT_ERR,"ctrip_SendEmail exception", ExcpUtil.buildErrorMessage(e)); }