2016-11-02 16 views
2

ログにスーパーロング例外を処理する方法を検討する人は誰ですか? Spring Bootでは大きな問題になります。なぜなら、abstrationの上に自動生成されたものや抽象化がたくさんあるからです。私はsuper long exceptionを取得します - 私はモデルクラスを持っていると@RepositoryRestResource + CrudRepositoryかかわらず、それを公開し、実行時に@NonNullまたはユニーク制約をヒットした場合例えばSpringブートで非常に長い例外ログが発生する

、。コンテナ全体を傍受し、より良いカスタムロギングを実装する方法や、すぐに使用できるソリューションを用意する方法があるはずです。事前にお申し込みいただきありがとうございます

PSsimilar questionがありますが、提案された解決策は現代のlog4j-2バージョンには関係していないようです。

答えて

0

私が思いついた解決策の1つは、Spring Controllerシナリオの多く。この場合

@ControllerAdvice 
@Slf4j 
public class GlobalExceptionHandler 
{ 
    @ResponseStatus(value = HttpStatus.BAD_REQUEST) 
    @ExceptionHandler({RollbackException.class, DataIntegrityViolationException.class}) 
    public @ResponseBody 
    Map<String,Object> allRollbacks 
    (
     Exception exception, 
     HttpServletRequest request, 
     HttpServletResponse response 
    ) 
    { 
     HashMap<String, Object> result = new HashMap<>(); 
     result.put("error", HttpStatus.BAD_REQUEST.name()); 

     Throwable exceptionToLog = Throwables.getRootCause(exception); 
     String exceptionClassName = exceptionToLog.getClass().getCanonicalName(); 
     String message = exceptionToLog.getMessage(); 

     log.info("{}: {}", exceptionClassName, message); 

     result.put("exception", exceptionClassName); 
     result.put("message", message); 

     return result; 
    } 
} 

、我々はintercepterからログに短い根本原因メッセージが表示され、クライアントはそのようなJSONレスポンスを受信します:

{ 
"exception": "org.postgresql.util.PSQLException", 
"error": "BAD_REQUEST", 
"message": "ERROR: duplicate key value violates unique constraint \"ukr6y7o33kjy3vispmnl7if5d4s\"\n Detail: Key (ref1_id, ref2_id, ref3_id)=(8325842b-ee40-48c3-ab6b-5b914e70b583, 9b0f5356-baa8-4ae2-a149-4f7b1f2dbfda, 9281369c-10a6-4649-bcd3-c18d2e5cd287) already exists." 
} 
関連する問題