diff --git a/app/kac-app/src/main/java/kr/co/palnet/kac/app/config/MessageSourceConfig.java b/app/kac-app/src/main/java/kr/co/palnet/kac/app/config/MessageSourceConfig.java index 4d2f3ec..33e834a 100644 --- a/app/kac-app/src/main/java/kr/co/palnet/kac/app/config/MessageSourceConfig.java +++ b/app/kac-app/src/main/java/kr/co/palnet/kac/app/config/MessageSourceConfig.java @@ -1,21 +1,17 @@ package kr.co.palnet.kac.app.config; -import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.MessageSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.context.support.MessageSourceAccessor; import org.springframework.context.support.ReloadableResourceBundleMessageSource; -@Slf4j @Configuration public class MessageSourceConfig { @Bean(name = "errorMessageSource") public MessageSource getErrorMessageSource() { - log.debug("===>> error message source local : {} ", LocaleContextHolder.getLocale()); ReloadableResourceBundleMessageSource errorMessageSource = new ReloadableResourceBundleMessageSource(); errorMessageSource.setBasenames("classpath:messages/errors/error"); errorMessageSource.setDefaultEncoding("UTF-8"); @@ -25,7 +21,6 @@ public class MessageSourceConfig { @Bean(name = "errorMessageSourceAccessor") public MessageSourceAccessor errorMessageSourceAccessor(@Qualifier("errorMessageSource") MessageSource errorMessageSource) { - log.debug("===>> error message source accessor local : {} ", LocaleContextHolder.getLocale()); return new MessageSourceAccessor(errorMessageSource); } } diff --git a/app/kac-app/src/main/java/kr/co/palnet/kac/app/core/exception/ServerExceptionHandler.java b/app/kac-app/src/main/java/kr/co/palnet/kac/app/core/exception/ServerExceptionHandler.java index 0968d92..4d76447 100644 --- a/app/kac-app/src/main/java/kr/co/palnet/kac/app/core/exception/ServerExceptionHandler.java +++ b/app/kac-app/src/main/java/kr/co/palnet/kac/app/core/exception/ServerExceptionHandler.java @@ -1,10 +1,16 @@ package kr.co.palnet.kac.app.core.exception; -import kr.co.palnet.kac.core.exception.AppException; import kr.co.palnet.kac.core.exception.BaseErrorCode; +import kr.co.palnet.kac.core.exception.BaseException; +import kr.co.palnet.kac.core.exception.Level; import kr.co.palnet.kac.core.exception.model.BaseErrorModel; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.NoSuchMessageException; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.context.support.MessageSourceAccessor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; @@ -13,70 +19,114 @@ import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.servlet.resource.NoResourceFoundException; import java.time.Instant; -import java.time.ZoneId; -import java.time.format.DateTimeFormatter; -@RestControllerAdvice @Slf4j +@RequiredArgsConstructor +@RestControllerAdvice public class ServerExceptionHandler { + @Qualifier("errorMessageSourceAccessor") + private final MessageSourceAccessor errorMessageSourceAccessor; - @ExceptionHandler(AppException.class) - public ResponseEntity appExceptionHandle(AppException e) { + @ExceptionHandler(BaseException.class) + public ResponseEntity appExceptionHandle(BaseException e) { BaseErrorCode errorType = e.getErrorCode(); BaseErrorModel baseBody = new BaseErrorModel(); - baseBody.setTimestamp(DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(Instant.now().atZone(ZoneId.systemDefault()))); - baseBody.setStatus(errorType.status()); - baseBody.setError(errorType.code()); - baseBody.setMessage(errorType.message()); + baseBody.setTimestamp(Instant.now()); + baseBody.setStatus(errorType.status().value()); + baseBody.setError(errorType.status().getReasonPhrase()); + baseBody.setCode(errorType.code()); + baseBody.setMessage(this.getMessage(errorType)); baseBody.setPath(this.getUrl()); - log.warn("",e); + this.printLog(e); return ResponseEntity.status(errorType.status()).body(baseBody); } @ExceptionHandler(NoResourceFoundException.class) - public ResponseEntity noResourceFoundException(NoResourceFoundException e){ + public ResponseEntity noResourceFoundException(NoResourceFoundException e) { BaseErrorModel baseBody = new BaseErrorModel(); - baseBody.setTimestamp(DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(Instant.now().atZone(ZoneId.systemDefault()))); + baseBody.setTimestamp(Instant.now()); baseBody.setStatus(e.getBody().getStatus()); - baseBody.setError(BaseErrorCode.NOT_FOUND_RESOURCE.code()); - baseBody.setMessage(e.getBody().getDetail()); + baseBody.setError(e.getBody().getDetail()); + baseBody.setCode(BaseErrorCode.WEB_NOT_FOUND.code()); + baseBody.setMessage(this.getMessage(BaseErrorCode.WEB_NOT_FOUND)); baseBody.setPath(e.getResourcePath()); - log.warn("",e); + log.warn("", e); return ResponseEntity.status(e.getBody().getStatus()).body(baseBody); } @ExceptionHandler(Exception.class) public ResponseEntity exceptionHandle(Exception e) { - BaseErrorCode errorType = BaseErrorCode.INTERNAL_SERVER_ERROR; + BaseErrorCode errorType = BaseErrorCode.UNKNOWN; BaseErrorModel baseBody = new BaseErrorModel(); - baseBody.setTimestamp(DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(Instant.now().atZone(ZoneId.systemDefault()))); - baseBody.setStatus(500); - baseBody.setError(e.getClass().getSimpleName()); + baseBody.setTimestamp(Instant.now()); + baseBody.setStatus(errorType.status().value()); + baseBody.setError(errorType.status().getReasonPhrase()); + baseBody.setCode(errorType.code()); + baseBody.setMessage(this.getMessage(errorType)); baseBody.setPath(this.getUrl()); - baseBody.setMessage(errorType.message()); - log.warn("",e); + log.error("", e); return ResponseEntity.status(errorType.status()).body(baseBody); } private String getUrl() { ServletRequestAttributes servletRequestAttr = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); - if (servletRequestAttr != null) return servletRequestAttr.getRequest().getRequestURI(); else return null; } + private String getMessage(BaseErrorCode e) { + String message = null; + try { +// message = errorMessageSourceAccessor.getMessage(e.code(), LocaleContextHolder.getLocale()); + message = errorMessageSourceAccessor.getMessage(e.code()); + } catch (NoSuchMessageException noSuchMessageException) { + message = "관리자에게 문의해주세요."; + } + return message; + } + + private void printLog(BaseException e) { + Level level = e.getLevel(); + String message = e.getLogMessage() == null ? e.getMessage() : e.getLogMessage(); + Object[] paramArray = e.getParamArray(); + + switch (level) { + case TRACE: + log.trace("message: {}, params: {}, trace: {}", message, paramArray, e.getStackTrace()); + log.trace("", e); + break; + case DEBUG: + log.debug("message: {}, params: {}, trace: {}", message, paramArray, e.getStackTrace()); + log.debug("", e); + break; + case INFO: + log.info("message: {}, params: {}, trace: {}", message, paramArray, e.getStackTrace()); + log.info("", e); + break; + case WARN: + log.warn("message: {}, params: {}, trace: {}", message, paramArray, e.getStackTrace()); + log.warn("", e); + break; + case ERROR: + log.trace("message: {}, params: {}, trace: {}", message, paramArray, e.getStackTrace()); + log.error("", e); + break; + default: + break; + } + } -} +} diff --git a/app/kac-app/src/main/java/kr/co/palnet/kac/app/core/web/BaseAcceptHeaderLocaleResolver.java b/app/kac-app/src/main/java/kr/co/palnet/kac/app/core/web/BaseAcceptHeaderLocaleResolver.java index 98d05cb..840c706 100644 --- a/app/kac-app/src/main/java/kr/co/palnet/kac/app/core/web/BaseAcceptHeaderLocaleResolver.java +++ b/app/kac-app/src/main/java/kr/co/palnet/kac/app/core/web/BaseAcceptHeaderLocaleResolver.java @@ -2,6 +2,7 @@ package kr.co.palnet.kac.app.core.web; import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; +import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.util.StringUtils; import org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver; @@ -57,8 +58,7 @@ public class BaseAcceptHeaderLocaleResolver extends AcceptHeaderLocaleResolver { .distinct() .findFirst().orElse(Locale.KOREAN); } - - log.info("{}, {}", request.getHeader(LOCALE_HEADER_KEY), locale); +// log.debug("{}, {}", request.getHeader(LOCALE_HEADER_KEY), locale); return locale; } catch (IllegalArgumentException e) { log.warn("{}", e.getMessage()); diff --git a/app/kac-app/src/main/resources/messages/errors/error.properties b/app/kac-app/src/main/resources/messages/errors/error.properties index c435a74..368e52c 100644 --- a/app/kac-app/src/main/resources/messages/errors/error.properties +++ b/app/kac-app/src/main/resources/messages/errors/error.properties @@ -1,5 +1,22 @@ -TEST001=\uD14C\uC2A4\uD2B8001 -TEST002=\uD14C\uC2A4\uD2B8002 -TEST003=\uD14C\uC2A4\uD2B8003 -TEST004=\uD14C\uC2A4\uD2B8004 -TEST005=\uD14C\uC2A4\uD2B8005 \ No newline at end of file +CM001=\uC131\uACF5\uC785\uB2C8\uB2E4. +CM900=\uC54C \uC218 \uC5C6\uB294 \uC624\uB958\uC785\uB2C8\uB2E4. +CM999=\uC2E4\uD328\uC785\uB2C8\uB2E4. +CM002=\uC694\uCCAD\uD558\uC2E0 \uB0B4\uC6A9\uC774 \uCC98\uB9AC \uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. +CM003=\uC785\uCD9C\uB825 \uC624\uB958\uC785\uB2C8\uB2E4. +CM100=\uB85C\uADF8\uC778\uC744 \uB2E4\uC2DC \uD574\uC8FC\uC138\uC694. +CM101=\uC774\uBBF8 \uB85C\uADF8\uC778\uD55C \uC0AC\uC6A9\uC790\uC785\uB2C8\uB2E4. +CM102=\uB85C\uADF8\uC778 \uC2DC\uB3C4\uAC00 \uC815\uD574\uC9C4 \uD69F\uC218\uB97C \uCD08\uACFC\uD558\uC600\uC2B5\uB2C8\uB2E4. +CM110=SNS \uB85C\uADF8\uC778\uC744 \uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. +CM111=\uC774\uBBF8 \uAC00\uC785\uB41C SNS \uACC4\uC815\uC785\uB2C8\uB2E4. +CM120=\uD1A0\uD070\uC774 \uB9CC\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4. +CM121=\uC798\uBABB\uB41C \uD1A0\uD070\uC785\uB2C8\uB2E4. +CM130=\uC0AC\uC6A9\uC790\uC758 \uACC4\uC815\uC774 \uC815\uC9C0\uB418\uC5C8\uC2B5\uB2C8\uB2E4. +CM131=\uC0AC\uC6A9\uC790\uC758 \uACC4\uC815\uC774 \uD734\uBA74\uC0C1\uD0DC\uC785\uB2C8\uB2E4. +CM200=\uCE90\uC2DC \uB85C\uB529\uC5D0 \uC2E4\uD328\uD558\uC600\uC2B5\uB2C8\uB2E4. +CM201=\uCE90\uC2DC \uB9AC\uB85C\uB529\uC5D0 \uC2E4\uD328\uD558\uC600\uC2B5\uB2C8\uB2E4. +CM401=\uC0AC\uC6A9\uC790\uC758 \uAD8C\uD55C\uC774 \uC5C6\uC2B5\uB2C8\uB2E4. +WB400=\uD30C\uB77C\uBBF8\uD130\uB97C \uB2E4\uC2DC \uD655\uC778 \uD6C4 \uC694\uCCAD\uD574\uC8FC\uC138\uC694. +WB500=\uC678\uBD80 \uC5F0\uB3D9 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD558\uC600\uC2B5\uB2C8\uB2E4. +WB404=\uC694\uCCAD\uD558\uC2E0 URL\uC774 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. +DT001=\uC774\uBBF8 \uB4F1\uB85D\uB41C \uB370\uC774\uD130 \uC785\uB2C8\uB2E4. +DT002=\uC694\uCCAD\uD55C \uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \ No newline at end of file diff --git a/app/kac-app/src/main/resources/messages/errors/error_en.properties b/app/kac-app/src/main/resources/messages/errors/error_en.properties index 26aa42e..c6e76b4 100644 --- a/app/kac-app/src/main/resources/messages/errors/error_en.properties +++ b/app/kac-app/src/main/resources/messages/errors/error_en.properties @@ -1,5 +1,22 @@ -TEST001=TEST001 -TEST002=TEST002 -TEST003=TEST003 -TEST004=TEST004 -TEST005=TEST005 \ No newline at end of file +CM001=It's a success. +CM900=Unknown error. +CM999=It's a failure. +CM002=Your request has not been processed. +CM003=Input/output error. +CM100=Please log in again. +CM101=This is a user who has already logged in. +CM102=The login attempt exceeded the specified number of times. +CM110=I can't log in to SNS. +CM111=This is an SNS account that has already been subscribed. +CM120=The token has expired. +CM121=Invalid token. +CM130=Your account has been suspended. +CM131=Your account is dormant. +CM200=Cache loading failed. +CM201=Cache reloading failed. +CM401=You do not have permissions. +WB400=Please check the parameters again and request them. +WB500=External interlocking error occurred. +WB404=The URL you requested does not exist. +DT001=Data already registered. +DT002=No data requested. \ No newline at end of file diff --git a/common/core/src/main/java/kr/co/palnet/kac/core/exception/AppException.java b/common/core/src/main/java/kr/co/palnet/kac/core/exception/AppException.java deleted file mode 100644 index 5058031..0000000 --- a/common/core/src/main/java/kr/co/palnet/kac/core/exception/AppException.java +++ /dev/null @@ -1,136 +0,0 @@ -package kr.co.palnet.kac.core.exception; - -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.MessageSource; - -import java.util.Locale; - -@Slf4j -public class AppException extends RuntimeException { - - - private static final long serialVersionUID = 1L; - - private final Level level; - - private final Source source; - - private final BaseErrorCode errorCode; - - - private final Object[] paramArray; - - private String sourceErrorCode; - - private String sourceErrorMessage; - - public AppException(Throwable th, Level level, Source source, BaseErrorCode errorCode, Object... paramArray) { - super(th != null ? th.getMessage() : errorCode.message(), th); - this.level = level; - this.errorCode = errorCode; - this.source = source; - this.paramArray = paramArray; - this.sourceErrorCode = errorCode.code(); - this.sourceErrorMessage = errorCode.message(); - } - - public AppException(Throwable th, Level level, BaseErrorCode errorCode, Object... paramArray) { - this(th, level, Source.INTERNAL, errorCode, paramArray); - } - - public AppException(Throwable th, Source source, BaseErrorCode errorCode, Object... paramArray) { - this(th, Level.WARN, source, errorCode, paramArray); - } - - public AppException(Throwable th, BaseErrorCode errorCode, Object... paramArray) { - this(th, Level.WARN, Source.INTERNAL, errorCode, paramArray); - } - - public AppException(Level level, Source source, String errorCode, Object... paramArray) { - this(null, level, source, errorCode, paramArray); - } - - public AppException(Level level, String errorCode, Object... paramArray) { - this(null, level, Source.INTERNAL, errorCode, paramArray); - } - - public AppException(Source source, String errorCode, Object... paramArray) { - this(null, Level.WARN, source, errorCode, paramArray); - } - - public AppException(BaseErrorCode errorCode, Object... paramArray) { - this(null, Level.WARN, Source.INTERNAL, errorCode, paramArray); - } -// public BaseException(String errorCode) { -// this(errorCode, new Object()); -// } - - public AppException(Throwable th, BaseErrorCode erorCode, String sourceErrorMessage) { - this(th, Level.WARN, BaseErrorCode.INTERNAL_SERVER_ERROR, (Object[])null); - this.sourceErrorCode = erorCode.code(); - this.sourceErrorMessage = errorCode.message(); - } - - public AppException(BaseErrorCode sourceErrorCode, String sourceErrorMessage) { - this(null, sourceErrorCode, sourceErrorMessage); - } - - @Deprecated - public AppException(Throwable th, Level level, BaseErrorCode errorCode, Source source, Object... paramArray) { - this(th, level, source, errorCode, paramArray); - } - - @Deprecated - public AppException(Level level, BaseErrorCode errorCode, Source source, Object... paramArray) { - this(null, level, source, errorCode, paramArray); - } - - public String getCode() { - return errorCode.code(); - } - - public BaseErrorCode getErrorCode(){ - return errorCode; - } - - public Object[] getParamArray() { - return paramArray; - } - - public Level getLevel() { - return level; - } - - public Source getSource() { - return source; - } - - public String getErrorMessage(MessageSource ms) { - if (ms == null) { - return BaseErrorCode.INTERNAL_SERVER_ERROR.message(); - } - log.debug("############ getErrorMessage : {}",ms); - log.debug("############ getErrorCode : {}",getCode()); - log.debug("############ getParamArray : {}",getParamArray()); - log.debug("############ ErrorCode.NOT_REGIST_ERROR_CODE.message() : {}", BaseErrorCode.NOT_REGIST_ERROR_CODE.message()); - log.debug("############ Locale.getDefault() : {}",Locale.getDefault()); - return ms.getMessage(getCode(), getParamArray(), BaseErrorCode.NOT_REGIST_ERROR_CODE.message(), Locale.getDefault()); - } - - public String getSourceErrorCode() { - return sourceErrorCode; - } - - public void setSourceErrorCode(String sourceErrorCode) { - this.sourceErrorCode = sourceErrorCode; - } - - public String getSourceErrorMessage() { - return sourceErrorMessage; - } - - public void setSourceErrorMessage(String sourceErrorMessage) { - this.sourceErrorMessage = sourceErrorMessage; - } - -} diff --git a/common/core/src/main/java/kr/co/palnet/kac/core/exception/BaseErrorCode.java b/common/core/src/main/java/kr/co/palnet/kac/core/exception/BaseErrorCode.java index 4846d32..125e550 100644 --- a/common/core/src/main/java/kr/co/palnet/kac/core/exception/BaseErrorCode.java +++ b/common/core/src/main/java/kr/co/palnet/kac/core/exception/BaseErrorCode.java @@ -1,63 +1,54 @@ package kr.co.palnet.kac.core.exception; -public enum BaseErrorCode { - SUCCESS("1", 200, "성공"), - FAIL("-1" , 500, "실패"), - - CREATE_SUCCESS("HC201", 201, "성공"), - - NON_VALID_PARAMETER("VP001", 400, "파라미터가 유효하지 않습니다."), - INTERNAL_SERVER_ERROR("ER500", 500, "내부 시스템 오류"), - - NOT_REGIST_ERROR_CODE("ER501", 500, "등록되지 않은 오류 코드"), - - DATA_NOTFIND("DT001", 204,"데이터 를 찾을수 없습니다."), - DATA_DUPLICATE("DT002", 500, "중복 데이터가 존재합니다."), - DATA_NO("DT003", 500, "데이터 미존재"), - - ALREADY_CERT("CT001", 200, "이미 인증 되어있는 값 입니다."), - - DB_ERROR("DB001", 500, "디비 처리중 오류"), - - NOT_FOUND_RESOURCE("N001", 404, "정의되지 않은 요청입니다."), - - TIME_OUT("T001", 400, "인증 시간 초과"), - - FILE_ERROR("F001", 500, "파일 읽어오기 오류"), - FILE_PARSING_ERROR("F002", 500, "파일 파싱중 오류"), +import org.springframework.http.HttpStatus; - NOT_AUTHENTICATION_USER("P001", 400, "인증실패"), - NOT_AUTHORIZED_USER("P002", 401, "인가되지 않은 사용자"), - NOT_PERMISSION("P003", 403, "권한이 없는 사용자"), - - - EXTERNAL_API_ERROR("EA500", 500, "외부서버 호출에 실패하였습니다.") - ; - - - - private final String code; - - private final int status; - - private final String message; - - private BaseErrorCode(String code, int status, String message) { - this.code = code; - this.status = status; - this.message = message; - } - - public String code() { - return this.code; - } - - public String message() { - return this.message; - } - - public int status(){ - return this.status; - } +public enum BaseErrorCode { + SUCCESS("CM001", HttpStatus.OK, "성공"), + FAILED("CM900", HttpStatus.INTERNAL_SERVER_ERROR, "실패"), + UNKNOWN("CM999", HttpStatus.INTERNAL_SERVER_ERROR, "실패(사용자 정의 없는 에러)"), + NOT_PROCESS("CM002", HttpStatus.INTERNAL_SERVER_ERROR, "처리되지 않음"), + IO_ERROR("CM003", HttpStatus.INTERNAL_SERVER_ERROR, "IO 에러"), + LOGIN_FAILED("CM100", HttpStatus.INTERNAL_SERVER_ERROR, "로그인 실패"), + LOGIN_DUPLICATED("CM101", HttpStatus.INTERNAL_SERVER_ERROR, "중복 로그인"), + LOGIN_ATTEMPT_COUNT("CM102", HttpStatus.INTERNAL_SERVER_ERROR, "로그인 실패 횟수 초과"), + LOGIN_SNS_FAILED("CM110", HttpStatus.INTERNAL_SERVER_ERROR, "SNS 로그인 실패"), + LOGIN_SNS_DUPLICATED("CM111", HttpStatus.INTERNAL_SERVER_ERROR, "SNS 가입 중복"), + TOKEN_EXPIRED("CM120", HttpStatus.INTERNAL_SERVER_ERROR, "토큰 만료"), + TOKEN_INVALID("CM121", HttpStatus.INTERNAL_SERVER_ERROR, "잘못된 토큰"), + ACCOUNT_LOCK("CM130", HttpStatus.INTERNAL_SERVER_ERROR, "계정 잠김"), + ACCOUNT_DORMANT("CM131", HttpStatus.INTERNAL_SERVER_ERROR, "휴면 계정"), + CACHE_LOAD_FAILED("CM200", HttpStatus.INTERNAL_SERVER_ERROR, "캐시 로딩 실패"), + CACHE_RELOAD_FAILED("CM201", HttpStatus.INTERNAL_SERVER_ERROR, "캐시 리로딩 실패"), + AUTH_EMPTY("CM401", HttpStatus.UNAUTHORIZED, "권한 없음"), + WEB_PARAM_INVALID("WB400", HttpStatus.INTERNAL_SERVER_ERROR, "잘못된 파라미터"), + WEB_NOT_FOUND("WB404", HttpStatus.INTERNAL_SERVER_ERROR, "찾을수 없는 페이지"), + WEB_API_ERROR("WB500", HttpStatus.INTERNAL_SERVER_ERROR, "외부 연동 에러"), + DATA_ALREADY_EXISTS("DT001", HttpStatus.INTERNAL_SERVER_ERROR, "이미 등록된 데이터"), + DATA_EMPTY("DT002", HttpStatus.INTERNAL_SERVER_ERROR, "데이터 없음"); + + + private final String code; + + private final HttpStatus status; + + private final String message; + + private BaseErrorCode(String code, HttpStatus status, String message) { + this.code = code; + this.status = status; + this.message = message; + } + + public String code() { + return this.code; + } + + public String message() { + return this.message; + } + + public HttpStatus status() { + return this.status; + } } diff --git a/common/core/src/main/java/kr/co/palnet/kac/core/exception/BaseException.java b/common/core/src/main/java/kr/co/palnet/kac/core/exception/BaseException.java new file mode 100644 index 0000000..e22c448 --- /dev/null +++ b/common/core/src/main/java/kr/co/palnet/kac/core/exception/BaseException.java @@ -0,0 +1,138 @@ +package kr.co.palnet.kac.core.exception; + +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.MessageSource; + +import java.util.Locale; + +@Getter +@Slf4j +public class BaseException extends RuntimeException { + + + private final BaseErrorCode errorCode; + + private final String logMessage; + + private final Level level; + + private final Object[] paramArray; + + public BaseException() { + this(BaseErrorCode.FAILED, null, Level.WARN, null); + } + + public BaseException(Object[] paramArray) { + this(BaseErrorCode.FAILED, null, Level.WARN, paramArray); + } + + public BaseException(Level level) { + this(BaseErrorCode.FAILED, null, level, null); + } + + public BaseException(Level level, Object[] paramArray) { + this(BaseErrorCode.FAILED, null, level, paramArray); + } + + public BaseException(String logMessage) { + this(BaseErrorCode.FAILED, logMessage, Level.WARN, null); + } + + public BaseException(String logMessage, Object[] paramArray) { + this(BaseErrorCode.FAILED, logMessage, Level.WARN, paramArray); + } + + public BaseException(String logMessage, Level level) { + this(BaseErrorCode.FAILED, logMessage, level, null); + } + + public BaseException(String logMessage, Level level, Object[] paramArray) { + this(BaseErrorCode.FAILED, logMessage, level, paramArray); + } + + public BaseException(BaseErrorCode errorCode) { + this(errorCode, null, Level.WARN, null); + } + + public BaseException(BaseErrorCode errorCode, Object[] paramArray) { + this(errorCode, null, Level.WARN, paramArray); + } + + public BaseException(BaseErrorCode errorCode, Level level) { + this(errorCode, null, level, null); + } + + public BaseException(BaseErrorCode errorCode, Level level, Object[] paramArray) { + this(errorCode, null, level, paramArray); + } + + public BaseException(BaseErrorCode errorCode, String logMessage) { + this(errorCode, logMessage, Level.WARN, null); + } + + public BaseException(BaseErrorCode errorCode, String logMessage, Object[] paramArray) { + this(errorCode, logMessage, Level.WARN, paramArray); + } + + public BaseException(BaseErrorCode errorCode, String logMessage, Level level) { + this(errorCode, logMessage, level, null); + } + + public BaseException(BaseErrorCode errorCode, String logMessage, Level level, Object[] paramArray) { + this.errorCode = errorCode; + this.logMessage = logMessage; + this.level = level; + this.paramArray = paramArray; + } + + public BaseException(String message, BaseErrorCode errorCode, String logMessage, Level level, Object[] paramArray) { + super(message); + this.errorCode = errorCode; + this.logMessage = logMessage; + this.level = level; + this.paramArray = paramArray; + } + + public BaseException(String message, Throwable cause, BaseErrorCode errorCode, String logMessage, Level level, Object[] paramArray) { + super(message, cause); + this.errorCode = errorCode; + this.logMessage = logMessage; + this.level = level; + this.paramArray = paramArray; + } + + public BaseException(Throwable cause, BaseErrorCode errorCode, String logMessage, Level level, Object[] paramArray) { + super(cause); + this.errorCode = errorCode; + this.logMessage = logMessage; + this.level = level; + this.paramArray = paramArray; + } + + public BaseException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace, BaseErrorCode errorCode, String logMessage, Level level, Object[] paramArray) { + super(message, cause, enableSuppression, writableStackTrace); + this.errorCode = errorCode; + this.logMessage = logMessage; + this.level = level; + this.paramArray = paramArray; + } + + public String getCode() { + return errorCode.code(); + } + + public String getErrorMessage(MessageSource ms) { + if (ms == null) { + return BaseErrorCode.UNKNOWN.message(); + } + log.debug("############ getErrorMessage : {}", ms); + log.debug("############ getErrorCode : {}", getCode()); + log.debug("############ getParamArray : {}", getParamArray()); + log.debug("############ ErrorCode.NOT_REGIST_ERROR_CODE.message() : {}", BaseErrorCode.UNKNOWN.message()); + log.debug("############ Locale.getDefault() : {}", Locale.getDefault()); + return ms.getMessage(getCode(), getParamArray(), BaseErrorCode.UNKNOWN.message(), Locale.getDefault()); + } + + +} diff --git a/common/core/src/main/java/kr/co/palnet/kac/core/exception/Level.java b/common/core/src/main/java/kr/co/palnet/kac/core/exception/Level.java index e5ca16e..d2cb6d7 100644 --- a/common/core/src/main/java/kr/co/palnet/kac/core/exception/Level.java +++ b/common/core/src/main/java/kr/co/palnet/kac/core/exception/Level.java @@ -1,24 +1,9 @@ package kr.co.palnet.kac.core.exception; public enum Level { - INFO(0), - WARN(1), - RETRY(2), - DROP(3), - RECYCLE(4), - CRITICAL(5); - - private int code; - - Level(int code) { - setLevel(code); - } - - public int getLevel() { - return code; - } - - public void setLevel(int code) { - this.code = code; - } + TRACE, + DEBUG, + INFO, + WARN, + ERROR } diff --git a/common/core/src/main/java/kr/co/palnet/kac/core/exception/Source.java b/common/core/src/main/java/kr/co/palnet/kac/core/exception/Source.java deleted file mode 100644 index bc48c63..0000000 --- a/common/core/src/main/java/kr/co/palnet/kac/core/exception/Source.java +++ /dev/null @@ -1,6 +0,0 @@ -package kr.co.palnet.kac.core.exception; - -public enum Source { - SERVER, - INTERNAL -} diff --git a/common/core/src/main/java/kr/co/palnet/kac/core/exception/model/BaseErrorModel.java b/common/core/src/main/java/kr/co/palnet/kac/core/exception/model/BaseErrorModel.java index 8ec41a4..f94b5b2 100644 --- a/common/core/src/main/java/kr/co/palnet/kac/core/exception/model/BaseErrorModel.java +++ b/common/core/src/main/java/kr/co/palnet/kac/core/exception/model/BaseErrorModel.java @@ -1,11 +1,19 @@ package kr.co.palnet.kac.core.exception.model; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.Instant; @Data +@NoArgsConstructor +@AllArgsConstructor +@Builder public class BaseErrorModel { - private String timestamp; + private Instant timestamp; private int status;