我们的网络应用程序正在使用将ExceptionMapper
某些异常映射到Response
。我们记录异常消息,然后引发新异常,如下所示:
catch (SomeException ex) {
LOG.error(ex.getMessage());
throw new MyException(ex.getMessage());
}
我们不会再次抛出相同的异常,所以我的问题是,是否将其视为Log and Throw反模式。因此,最好删除相似位置的日志并将它们移至以下几个ExceptionMapper
类:
@Provider
public class MyExceptionMapper implements ExceptionMapper<MyException> {
// bla bla
@Override
public Response toResponse(final MyException ex) {
LOG.error(ex.getMessage());
return Response.status(400).entity("something").build();
}
}
可能重复你应该报告异常的消息文本?
IMO根本不提及这是一个Web服务是不公平的。确实确实改变了游戏规则,因为例如仅使用常规的异常处理机制可能会带来安全风险;您不希望仅在500错误响应中将任何和所有异常发送回去,因此需要对其进行检查和过滤。在处理具有外部客户端直接调用它的系统时,积极的现场日志记录也更为普遍。在重复调用的服务调用中记录堆栈跟踪可能导致难以管理的日志文件大小和性能问题。
@Gimby在这种情况下,OP不会在响应中发送任何错误详细信息(可能是样板“发生错误”内容)。另外,如何在没有堆栈跟踪的情况下诊断问题?滚动记录器通常会注意存储大小,日志数据可压缩。
—
Marko Topolnik
ex.getMessage()
,我会立即阻止您,这已经错了。