From fd18b29c4c503b7cf6333dbdba0d9372a2a74a76 Mon Sep 17 00:00:00 2001 From: Jansoon Date: Sun, 21 Jun 2026 16:49:38 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EC=98=88=EC=99=B8=20=EB=A1=9C=EA=B9=85?= =?UTF-8?q?=20=EB=A0=88=EB=B2=A8=EC=9D=84=204xx/5xx=EB=A1=9C=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC=20(#243)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../error/handler/GlobalExceptionHandler.java | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/sofa/linkiving/global/error/handler/GlobalExceptionHandler.java b/src/main/java/com/sofa/linkiving/global/error/handler/GlobalExceptionHandler.java index 57da09d0..aedb08bc 100644 --- a/src/main/java/com/sofa/linkiving/global/error/handler/GlobalExceptionHandler.java +++ b/src/main/java/com/sofa/linkiving/global/error/handler/GlobalExceptionHandler.java @@ -37,64 +37,68 @@ public ResponseEntity handleNoResourceFound(NoResourceFoundException excep ========================= */ @ExceptionHandler(BusinessException.class) public ResponseEntity> handleBusinessException(BusinessException ex) { - log.error(ex.getMessage(), ex); + if (ex.getErrorCode().getStatus().is5xxServerError()) { + log.error("BusinessException [{}]", ex.getErrorCode().getCode(), ex); + } else { + log.warn("BusinessException [{}]: {}", ex.getErrorCode().getCode(), ex.getMessage()); + } return ErrorResponse.build(ex.getErrorCode()); } /* ========================= - 검증/바인딩 예외 + 검증/바인딩 예외 (모두 4xx) ========================= */ @ExceptionHandler(MethodArgumentNotValidException.class) public ResponseEntity> handleMethodArgumentNotValid(MethodArgumentNotValidException ex) { - log.error(ex.getMessage(), ex); + log.warn("Validation failed: {}", ex.getMessage()); return ErrorResponse.build(CommonErrorCode.INVALID_INPUT_VALUE); } @ExceptionHandler(ConstraintViolationException.class) public ResponseEntity> handleConstraintViolation(ConstraintViolationException ex) { - log.error(ex.getMessage(), ex); + log.warn("Constraint violation: {}", ex.getMessage()); return ErrorResponse.build(CommonErrorCode.INVALID_INPUT_VALUE); } @ExceptionHandler(MethodArgumentTypeMismatchException.class) public ResponseEntity> handleTypeMismatch(MethodArgumentTypeMismatchException ex) { - log.error(ex.getMessage(), ex); + log.warn("Type mismatch: parameter '{}'", ex.getName()); return ErrorResponse.build(CommonErrorCode.TYPE_MISMATCH); } @ExceptionHandler(MissingServletRequestParameterException.class) public ResponseEntity> handleMissingParam(MissingServletRequestParameterException ex) { - log.error(ex.getMessage(), ex); + log.warn("Missing request parameter: {}", ex.getParameterName()); return ErrorResponse.build(CommonErrorCode.MISSING_REQUEST_PARAMS); } @ExceptionHandler(HttpMessageNotReadableException.class) public ResponseEntity> handleNotReadable(HttpMessageNotReadableException ex) { - log.error(ex.getMessage(), ex); + log.warn("Malformed request body"); return ErrorResponse.build(CommonErrorCode.BAD_REQUEST); } /* ========================= - HTTP 관련 예외 + HTTP 관련 예외 (모두 4xx) ========================= */ @ExceptionHandler(HttpRequestMethodNotSupportedException.class) public ResponseEntity> handleMethodNotSupported(HttpRequestMethodNotSupportedException ex) { - log.error(ex.getMessage(), ex); + log.warn("Method not supported: {}", ex.getMethod()); return ErrorResponse.build(CommonErrorCode.METHOD_NOT_ALLOWED); } @ExceptionHandler(HttpMediaTypeNotSupportedException.class) public ResponseEntity> handleMediaTypeNotSupported(HttpMediaTypeNotSupportedException ex) { - log.error(ex.getMessage(), ex); + log.warn("Media type not supported: {}", ex.getContentType()); return ErrorResponse.build(CommonErrorCode.HTTP_MEDIA_NOT_SUPPORT); } /* ========================= - 그 외 모든 예외 + 그 외 모든 예외 (예상 못 한 5xx) ========================= */ @ExceptionHandler(Exception.class) public ResponseEntity> handleException(Exception ex) { - log.error(ex.getMessage(), ex); + log.error("Unhandled exception", ex); return ErrorResponse.build(CommonErrorCode.INTERNAL_SERVER_ERROR); }