首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用HandlerExceptionResolver不打印异常

如何使用HandlerExceptionResolver不打印异常
EN

Stack Overflow用户
提问于 2015-03-17 18:28:15
回答 2查看 187关注 0票数 0
代码语言:javascript
复制
public class AtrExceptionResolver implements HandlerExceptionResolver {
private final static Log log =LogFactory.getLog(AtrExceptionResolver.class);

@Override
public ModelAndView resolveException(HttpServletRequest request,
        HttpServletResponse response, Object handler, Exception ex) {
    boolean ajaxrequest = false;
    if (request.getRequestURI().indexOf("/ajax/") > 0)
        ajaxrequest = true;
    if (ex instanceof AtrException) {
        AtrException atrE = (AtrException) ex;
        log.error(
                "AtrException:code:" + atrE.getCode() + ",desc:"
                        + atrE.getMsg(), ex);
        if (ajaxrequest) {
            PrintWriter out = null;
            try {
                out = response.getWriter();
                out.print("{\"e\":\"" + atrE.getCode()
                        + "\",\"message\":\"" + atrE.getMsg() + "\"}");
                out.flush();

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                out.close();
            }
        } else {
            try {
                goToError(request, response);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    } else {
        log.error("Exception:desc:" + ex.getMessage(), ex);
        if (ajaxrequest) {
            PrintWriter out = null;
            try {
                out = response.getWriter();
                out.print("{\"e\":\"3\",\"message\":\"system error\"}");
                out.flush();

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                out.close();
            }
        } else {
            try {
                goToError(request, response);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    return null;

}

private void goToError(HttpServletRequest request,
        HttpServletResponse response) throws Exception {
    response.sendRedirect(request.getContextPath() + "/jsp/error.jsp");
}

atrException是我自己定义的,所以我不想在console.only中使用printStackTrace()将它打印到日志中。我调试了它,发现它被standardwrappervalve.invoke()打印出来了。如何在控制台不打印atrException消息?

EN

回答 2

Stack Overflow用户

发布于 2015-03-17 18:53:30

如果我理解您的问题,那么您希望将异常堆栈跟踪放在String对象中,您可以将其用于日志记录。

你可以使用下面的方法。

代码语言:javascript
复制
public String getErrorLog(Throwable throwable) {
    if (throwable != null) {
        StringWriter errors = new StringWriter();
        throwable.printStackTrace(new PrintWriter(errors));
        return errors.toString();
    }
    return "";
}

返回值是您可以记录的堆栈跟踪。

票数 0
EN

Stack Overflow用户

发布于 2015-03-18 09:51:28

代码语言:javascript
复制
return new ModelAndView();

这种方法可以解决。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29096729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档