Pam
Pam 블로그 주인장

Logger 사용

시스템이 작동하는 동안 발생하는 어떤 이벤트의 동작을 확인하고 싶을 때가 있다. 개발을 해본 사람이라면 언어 불문하고 누구나 시도해봤을 일이다. (아마도 “print”를 사용해서)

간단한 Logging 작업으로 printf를 사용하는 것도 나쁘진 않으나 Java에서는 이러한 이벤트 기록 용으로 제공하는 라이브러리가 존재한다.
Log4j라던지 SLF4J라던지 JUL(java util logging)이라던지… 수많은 로그 라이브러리들이 있으며 이 중 SLF4J(Simple Logging Facade for Java)는 다양한 로깅 프레임워크를 추상화 해주는 인터페이스의 모음이다. 인터페이스의 사용으로 개발자는 이후 로깅 라이브러리를 변경하더라도 코드를 수정할 필요가 없어진다.

Logging
  • DEBUG: 디버깅 목적으로 사용되는 메시지. 일반적으로 프로덕션 환경에서는 활성화되지 않는다.
  • INFO: 애플리케이션의 상태나 이벤트에 대한 일반 정보
  • WARN: 애플리케이션 작동을 방해하지 않는 잠재적인 문제를 나타내는 경고
  • ERROR: 주의가 필요하지만 애플리케이션이 반드시 중단될 필요는 없는 오류
  • FATAL: 애플리케이션 종료를 초래하는 심각한 오류
  • slf4j 사용 방법

    slf4j은 두 가지 방법으로 사용 가능하다.

    방법1

    1
    
    Logger log = LoggerFactory.getLogger(getClass());
    

    방법2

    1
    2
    3
    4
    
    @Slf4j
    public class HomeController {
        ...
    }
    


    아래는 slf4j을 사용하여 controller가 실행됐는지 확인하는 예시이다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    @Controller
    @Slf4j
    public class HomeController {
        @RequestMapping("/")
        public String home() {
            log.info("home controller");
            return "home";
        }
    
    }
    

    로그 출력 확인
    정상적으로 home controller가 출력됐음을 확인할 수 있다. 따라서 우리는 home Controller가 실행은 되었으나 그 안에서 오류가 발생했단 것 또한 알 수 있다.