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));
        }
经验分享 程序员 微信小程序 职场和发展