Google 웹 애플리케이션에서 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 이것이 웹 서비스라는 것을 전혀 언급하지 않는 것은 실제로 공평하지 않습니다. 예를 들어 규칙적인 예외 처리 메커니즘을 사용하는 것이 보안 상 위험 할 수 있기 때문에 실제로 게임 규칙이 변경됩니다. 500 오류 응답으로 모든 예외를 다시 보내지 않으려면 확인하고 필터링해야합니다. 외부 클라이언트가 직접 호출하는 시스템을 처리 할 때는 적극적인 현장 로깅도 훨씬 일반적입니다. 반복적으로 호출되는 서비스 호출에서 스택 추적을 기록하면 관리 할 수없는 로그 파일 크기 및 성능 문제가 발생할 수 있습니다.
@Gimby이 경우 OP는 응답에 오류 세부 정보를 보내지 않습니다 (아마도 상용구 "오류가 발생했습니다"내용). 또한 스택 추적없이 문제를 어떻게 진단합니까? 롤링 로거는 일상적으로 스토리지 크기를 관리하며 로그 데이터는 압축하기가 어렵습니다.
—
Marko Topolnik
ex.getMessage()
것입니다. 그것은 이미 틀 렸습니다.