From 8957fd5c3f3fca74ca59ceb4a931f9027c921f98 Mon Sep 17 00:00:00 2001 From: Klaus Date: Mon, 26 Jan 2026 09:14:43 +0900 Subject: [PATCH] =?UTF-8?q?=EC=98=88=EC=99=B8=20=EB=A1=9C=EA=B7=B8=20?= =?UTF-8?q?=ED=95=9C=EA=B8=80=20=ED=91=9C=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sodalive/common/SodaExceptionHandler.kt | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/common/SodaExceptionHandler.kt b/src/main/kotlin/kr/co/vividnext/sodalive/common/SodaExceptionHandler.kt index 443e58cc..ecb706c0 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/common/SodaExceptionHandler.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/common/SodaExceptionHandler.kt @@ -1,5 +1,6 @@ package kr.co.vividnext.sodalive.common +import kr.co.vividnext.sodalive.i18n.Lang import kr.co.vividnext.sodalive.i18n.LangContext import kr.co.vividnext.sodalive.i18n.SodaMessageSource import org.slf4j.LoggerFactory @@ -20,10 +21,14 @@ class SodaExceptionHandler( private val messageSource: SodaMessageSource ) { private val logger = LoggerFactory.getLogger(this::class.java) + private val logLang = Lang.KO @ExceptionHandler(SodaException::class) fun handleSodaException(e: SodaException) = run { - logger.error("API error", e) + val logMessage = e.messageKey?.takeIf { it.isNotBlank() }?.let { messageSource.getMessage(it, logLang) } + ?: e.message?.takeIf { it.isNotBlank() } + ?: messageSource.getMessage("common.error.unknown", logLang) + logger.error("API error: {}", logMessage, e) val message = e.messageKey?.takeIf { it.isNotBlank() }?.let { messageSource.getMessage(it, langContext.lang) } ?: e.message?.takeIf { it.isNotBlank() } ?: messageSource.getMessage("common.error.unknown", langContext.lang) @@ -35,35 +40,40 @@ class SodaExceptionHandler( @ExceptionHandler(MaxUploadSizeExceededException::class) fun handleMaxUploadSizeExceededException(e: MaxUploadSizeExceededException) = run { - logger.error("API error", e) + val logMessage = messageSource.getMessage("common.error.max_upload_size", logLang) + logger.error("API error: {}", logMessage, e) val message = messageSource.getMessage("common.error.max_upload_size", langContext.lang) ApiResponse.error(message = message) } @ExceptionHandler(AccessDeniedException::class) fun handleAccessDeniedException(e: AccessDeniedException) = run { - logger.error("API error", e) + val logMessage = messageSource.getMessage("common.error.access_denied", logLang) + logger.error("API error: {}", logMessage, e) val message = messageSource.getMessage("common.error.access_denied", langContext.lang) ApiResponse.error(message = message) } @ExceptionHandler(InternalAuthenticationServiceException::class) fun handleInternalAuthenticationServiceException(e: InternalAuthenticationServiceException) = run { - logger.error("API error", e) + val logMessage = messageSource.getMessage("common.error.bad_credentials", logLang) + logger.error("API error: {}", logMessage, e) val message = messageSource.getMessage("common.error.bad_credentials", langContext.lang) ApiResponse.error(message) } @ExceptionHandler(BadCredentialsException::class) fun handleBadCredentialsException(e: BadCredentialsException) = run { - logger.error("API error", e) + val logMessage = messageSource.getMessage("common.error.bad_credentials", logLang) + logger.error("API error: {}", logMessage, e) val message = messageSource.getMessage("common.error.bad_credentials", langContext.lang) ApiResponse.error(message) } @ExceptionHandler(DataIntegrityViolationException::class) fun handleDataIntegrityViolationException(e: DataIntegrityViolationException) = run { - logger.error("API error", e) + val logMessage = messageSource.getMessage("common.error.already_registered", logLang) + logger.error("API error: {}", logMessage, e) val message = messageSource.getMessage("common.error.already_registered", langContext.lang) ApiResponse.error(message) } @@ -71,7 +81,10 @@ class SodaExceptionHandler( @ResponseStatus(value = HttpStatus.NOT_FOUND) @ExceptionHandler(AdsChargeException::class) fun handleAdsChargeException(e: AdsChargeException) = run { - logger.error("API error - AdsChargeException ::: ", e) + val logMessage = e.messageKey?.takeIf { it.isNotBlank() }?.let { messageSource.getMessage(it, logLang) } + ?: e.message?.takeIf { it.isNotBlank() } + ?: messageSource.getMessage("common.error.invalid_request", logLang) + logger.error("API error - AdsChargeException: {}", logMessage, e) val message = e.messageKey?.takeIf { it.isNotBlank() }?.let { messageSource.getMessage(it, langContext.lang) } ?: e.message?.takeIf { it.isNotBlank() } ?: messageSource.getMessage("common.error.invalid_request", langContext.lang) @@ -81,7 +94,8 @@ class SodaExceptionHandler( @ExceptionHandler(Exception::class) fun handleException(e: Exception) = run { if (e is ResponseStatusException) throw e - logger.error("API error", e) + val logMessage = messageSource.getMessage("common.error.unknown", logLang) + logger.error("API error: {}", logMessage, e) val message = messageSource.getMessage("common.error.unknown", langContext.lang) ApiResponse.error(message) }