我有这个处理程序:
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()是正确的false
发布于 2013-09-24 16:11:15
确保ANT中的编译目标(如果使用ANT)将debug属性设置为off,如下所示。
<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);https://stackoverflow.com/questions/18975729
复制相似问题