【问题标题】:Suppress strack trace printing in Spring HandlerExceptionResolver在 Spring HandlerExceptionResolver 中抑制堆栈跟踪打印
【发布时间】:2013-09-29 07:43:46
【问题描述】:

我有这个处理程序:

public class JsonHandlerExceptionResolver implements HandlerExceptionResolver {

    private static Logger log = Logger.getLogger(JsonHandlerExceptionResolver.class);


    @Override
    @ResponseBody
    public ModelAndView resolveException(HttpServletRequest req, HttpServletResponse response, Object obj, Exception e) {
        Output out=new Output(false);
        out.setException(e.getClass().getName());
        out.setError(e.getLocalizedMessage());
        response.setContentType("application/json");
        log.error(e.getMessage());
        if(log.isDebugEnabled()) e.printStackTrace();
        try{
            response.getWriter().println(new Gson().toJson(new Output(e.getMessage(),e.getClass().getSimpleName())));
            response.getWriter().flush();
            response.getWriter().close();
        }catch (Exception e1) {
            log.error(e1);
            if(log.isDebugEnabled()) e1.printStackTrace();
        }
        return null;
    }

}

如果未启用日志调试级别,我不想将堆栈跟踪打印到 jvm sterr,但是我因此在此处理程序之后输出堆栈跟踪...你能告诉我为什么吗?

调试我看到 log.isDebugEnabled() 在我的测试中是正确的错误

【问题讨论】:

  • 我已经为您提供了答案,如果它对您有用,请告诉我。

标签: java spring exception handlerexceptionresolver


【解决方案1】:

确保 ANT 中的编译目标(如果您使用 ANT)将调试属性设置为关闭,如下所示。

<target name="test-compile" depends="compile,test-init">
        <javac destdir="${test.classes.dir}" debug="off" includeantruntime="true" srcdir="${test.dir}">
            <classpath refid="test.compile.classpath">
            </classpath>
        </javac>
    </target>

我还会检查可能会打印堆栈恍惚的日志记录模式。因此,堆栈跟踪将打印在 if 条件上方的行,即:

log.error(e1);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2015-06-07
    • 2015-07-27
    • 2017-08-31
    • 1970-01-01
    • 2020-07-25
    • 2018-07-06
    相关资源
    最近更新 更多