Spring Boot(mvc)中是否有一种方法可以记录一个自定义异常,并在日志文件中不可见其堆栈跟踪的情况下抛出它?但对于任何其他异常,仍请参见堆栈跟踪。
@ResponseStatus(value = HttpStatus.CONFLICT)
public class DuplicateFoundException extends RuntimeException {
public DuplicateFoundException(String message) {
super(message);
}
}
if (!voteDao.findByItemAndUser(item, voteDto.getUserId()).isEmpty()) {
log.warn("... already voted ..."); //TODO: don't do this for every throw
throw new DuplicateFoundException("... already voted ...");
}
@ControllerAdvice
public class RestExceptionHandler {
private static final Logger log = Logger.getLogger(RestExceptionHandler.class);
@ExceptionHandler
public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {
if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class) != null) {
log.warn(e.getMessage());
} else {
log.error("...");
}
throw e;
}
}
现在的问题是,我不仅看到了日志条目,还看到了自定义异常的堆栈跟踪,而且找不到防止这种情况的方法。我想问题是再扔一次引起的。一个可能的解决方案是为exception创建一个自定义类,我将返回它,但我不喜欢这个想法,因为异常编组似乎工作得很好。
有什么提示吗?谢了。
调用重载的超级构造函数以避免在响应中显示stacktrace。
public class ProductCustomException extends Exception{
private static final long serialVersionUID = -291211739734090347L;
public ProductCustomException(String message) {
super(message,null,false,false);
}
}
从异常类超加载构造函数
protected Exception(String message, Throwable cause,
boolean enableSuppression,
boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
我在Scala/Play2.2.0应用程序上使用Logback 1.0.13。现有配置如下所示:
问题内容: 如何将异常的堆栈跟踪信息打印到stderr以外的流上?我发现的一种方法是使用getStackTrace()并将整个列表打印到流中。 问题答案: 可以接受or或参数: 也就是说,请考虑将SLF4J之类的记录器接口与LOGBack或log4j之类的记录实现一起使用。
问题内容: 在Java日志中,很多时候我会得到类似以下内容的信息: 有谁知道如何显示完整的堆栈跟踪(即显示其他113行)? Throwable 的JavaDocs(用于Java 7) 对正在发生的事情有非常详细的解释。 问题答案: 当您看到“ … 113更多”时,表示“由…引起的”异常的其余行与父异常的那一点起的其余行相同。 例如,您将拥有 这两个堆栈跟踪在AbstractBatcher.exec
我使用的是JBossAS7。我已经知道如何使用自己的错误页处理HTTP错误(例如404、500、...)--这不是问题。但出于调试的原因,我需要查看错误stacktrace。如何访问默认显示的消息并将其嵌入到错误页面中?
问题内容: 这可能是一个非常幼稚的问题。 我曾经相信Java 中的a 总是 包含堆栈跟踪。这是正确的吗? 现在看起来我捕获了 没有 堆栈跟踪的异常。是否有意义?是否 可以 在没有堆栈跟踪的情况下捕获异常? 问题答案: 无需堆栈跟踪就可以捕获Java中的Throwable对象: 构造一个具有指定详细消息,原因,启用或禁用原因,启用或禁用 可写堆栈跟踪 的新throwable 。 填写执行堆栈跟踪。此
现在看来,我在没有堆栈跟踪的情况下捕获异常。有道理吗?是否有可能在没有堆栈跟踪的情况下捕获异常?