使用logback、log2j输出java异常如果采用如下方式:
try{...}catch (Exception e){logger.error("[lid:{}] [{}]<< exception happened! detail:{}", logIndex, logFlag, e);}
则无法输出异常的调用堆栈,下面这个一个静态工具函数,可以输出异常的堆栈信息,如下:
public static String getExceptionStackTrace(Throwable anexcepObj){StringWriter sw = null;PrintWriter printWriter = null;try{if(anexcepObj != null){sw = new StringWriter();printWriter = new PrintWriter(sw);anexcepObj.printStackTrace(printWriter);printWriter.flush();sw.flush();return sw.toString();}elsereturn null;}finally{try{if(sw != null)sw.close();if(printWriter != null)printWriter.close();}catch (IOException e){e.printStackTrace();}}}
它的使用方式为:
try{...}catch (Exception e){logger.error("[lid:{}] [{}]<< exception happened! detail:{}", logIndex, logFlag, getExceptionStackTrace(e));}