Spring - log level에 대한 이해

겔로그·2022년 3월 6일
0

Spring Boot

목록 보기
13/21
post-thumbnail

개요

개발을 하면서 언제나 피곤한 부분은 오류사항을 수정하는 것입니다. 어디서 틀렸는지를 알지 못하면 개발자는 처리 시작지점부터 끝지점까지 모든 로직을 확인하며 어떤 에러가 발생했는지 확인해야만 합니다.

물론, 처리중에 발생하는 것은 친절하게 어떤 파일의 몇번째 줄에서 에러가 발생했는지 알려주지만 해당 에러가 어떻게 발생했는지,어떤 시점에서 발생한 것인지까지 상세한 설명까지는 해주지 않습니다.

그래서 우리는 서비스의 동작 상태를 파악하기 위함과 어느 부분에서 장애가 발생하였는지 좀 더 구체적으로 알기 위해 로그를 작성합니다.

로그 작성 목적

  • 서비스 동작 상태 파악
  • 장애 파악 & 알람

log의 종류

로그의 종류에는 크게 6가지로 나뉘어지며 각각 다른 의미를 가지고 있습니다.

로그Level
FATAL애플리케이션이 이벤트를 발생했거나 중요한 비즈니스 기능 중 하나가 더 이상 작동하지 않는 상태일 경우를 알려주는 로그 Level
ERROR애플리케이션이 하나 이상의 기능이 제대로 작동하지 않는 문제에 부딪힐 때 사용해야 하는 로그 Level
WARN애플리케이션이 문제 또는 프로세스에 방해가 될 수 있는 상황에 예기치 않은 일이 발생했음을 나타내는 로그 Level
INFO애플리케이션이 특정 상태에 들어갔는지 등을 나타내는 표준 로그 Level, 일반적으로 정보제공을 위해 사용
DEBUG문제를 해결하는데 필요할 수 있는 정보 제공, 모든 것이 올바르게 정상적으로 동작하는지 확인하기 위해 테스트 환경에서 실행할 경우 사용
TRACE애플리케이션의 모든 상황을 완벽하게 파악하는 상황에서 사용, debug의 윗 수준으로 log정보가 매우 상세하게 나타냄

나는 테스트 환경에서 개발하며, 특정 정보를 확인하거나 오류가 발생할 경우를 확인하는 목적으로
log를 사용할 것이기에 Error ~ Debug 수준의 log를 이용할 계획이다.

예시

log.info

    /**
     * 쿠키 삭제
     * @param sessionId
     * @return
     */
    private Cookie deleteCookie(String sessionId) {
        Cookie cookie = new Cookie(HAMA_COOKIE, sessionId);
        cookie.setHttpOnly(true);
        cookie.setDomain(DOMAIN);
        cookie.setPath("/");
        cookie.setMaxAge(0);
        log.info("delete Cookie"); //해당 시점에 쿠키 삭제됐음을 정보로 알려줌
        return cookie;
    }

log.error

    /**
     * Session 생성
     * @param loginAccountDTO
     * @return
     * @throws LoginException
     */
    public Cookie createSession(LoginAccountDTO loginAccountDTO) throws LoginException {
        try {
            log.debug("--------------create Session--------------");
            HttpEntity<LoginAccountDTO> httpEntity = new HttpEntity<>(loginAccountDTO, null);
            log.debug("url : {} ", URL_TEMP + AUTH_LOGIN_URL);
            log.debug("url : {} ", URL_TEMP);
            log.debug("url : {} ", AUTH_LOGIN_URL);
            log.debug("login account {}", httpEntity.getBody());

            ResponseEntity<String> responseEntity =
                    restTemplate.exchange(URL_TEMP + AUTH_LOGIN_URL, HttpMethod.POST, httpEntity, String.class);

            String sessionId = responseEntity.getBody();
            return makeCookieBySessionId(sessionId);
        } catch (Exception e) {
  			log.error("session not create") // 세션이 만들어지지 않아 error 정보 남김
            throw new LoginException(ErrorCode.SESSION_NOT_CREATE);
        }
    }
profile
Gelog 나쁜 것만 드려요~

0개의 댓글