임포트 도구가 하위 수준 실패를 잡아 다른 예외로 바꾸고 나면 진단 로그에 남는 것은 new ImportFailure("Import failed") 하나뿐입니다. 호출자가 로컬 파일 정보를 볼 이유는 없습니다. 하지만 실패를 조사하는 사람에게는 실제로 무엇이 잘못됐는지가 필요합니다.
도메인 예외는 그대로 두고, 그 생성자에서 원래 실패를 Throwable의 원인으로 넘기면 됩니다. 자바는 공개 예외의 분류를 하위 수준 분류로 바꾸지 않고도 이 인과 관계를 이어 줍니다.
공개 응답은 도메인 분류와 일부러 고른 메시지를 씁니다. 문구를 getCause().getMessage()에서 가져와서는 안 됩니다. 원인에는 바로 우리가 감추려던 로컬 정보가 들어 있을 수 있기 때문입니다. 내부 진단에도 다루는 방침이 있어야 합니다. 예외 값을 전부 출력하라는 지시는 방침이라고 하기 어렵습니다.
진단 정보가 풍부해지면 접근 권한과 마스킹 규칙이 따라옵니다. 그 부담은 분명히 있습니다. 원인을 버리면 그 부담은 피하지만 두 단어짜리 로그로 조사해야 합니다. 저라면 마스킹 쪽을 감수하겠습니다.