ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring MVC - 로깅(Logging) 간단히 알아보자(SLF4J, Logback)
    Spring/Spring MVC 2022. 1. 28. 16:38
    728x90
    반응형

     

     

     

    로깅(Logging)이란?

     

     로깅은 정보를 제공하는 일련의 기록인 로그를 생성하도록 시스템을 작성하는 활동을 말한다. 따라서 웹 애플리케이션이 작동하는데 중요 기능이 실행되는 부분에는 적절한 로그를 남겨 시스템 상태/작동 정보를 시간의 경과에 따라 기록하여 사용한다. 저장된 로그는 사용자의 패턴이나 시스템 동작 자체의 분석에 사용될 수 있으며 해킹이나 침입 등의 사고가 발생한 경우 비정상 동작의 기록을 통해 추적을 수행할 수 있도록 돕는다.

     

     우리는 간단하게 System.out.println을 이용하여 입출력 및 변수 값들을 출력하여 로그를 생성할 수 있지만 로그의 양이나 수준을 조절할 수 없고, 출력된 로그를 파일 등에 저장하기도 불편하다. 또한 System.out.println을 자주 이용하다 보면 웹 어플리케이션의 속도가 상당히 느려진다. 따라서 실무에서는 System.out.println을 사용하여 로그를 남기지 않는다.

     

     실제로 로깅을 할 때는 따로 로깅 라이브러리를 사용하며 수많은 로깅 라이브러리가 존재하는데 스프링 부트 로깅 라이브러리는 기본적으로 SLF4J와 Logback을 사용한다. SLF4J 라이브러리는 Logback, Log4J, Log4J2 등을 통합하여 인터페이스로 제공하는 라이브러리이다. 

     

     

    로그 사용시 장점

    • 쓰레드 정보, 클래스 이름 같은 부가 정보를 함께 볼수 있고, 출력 모양을 조정할 수 있다.
    • 로그 레벨에 따라 개발 서버에서는 모든 로그를 출력하고,
      운영서버에서는 출력하지 않는 등 로그를 상황에 맞게 조절할 수 있다.
    • 파일이나 네트워크 등, 로그를 별도의 위치에 남길 수 있다.

     

     

     

    로깅 사용법

     

     간단한 코드로 로그를 콘솔에 출력하는 방법에 대해 알아보자.

    /log-test URI로 요청

    package hello.springmvc.basic;
    
    import lombok.extern.slf4j.Slf4j;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @Slf4j
    //자동으로 해당 코드를 넣어준다
    //private final Logger log = LoggerFactory.getLogger(getClass());
    
    @RestController
    public class LogTestController {
    
    //    private final Logger log = LoggerFactory.getLogger(getClass());
    
        @RequestMapping("/log-test")
        public String logTest() {
            String name ="Spring";
    
            System.out.println("name = " + name);
    
            // 원하는 로그 레벨을 기록할 수 있다.
            log.trace("trace log={}", name);
            log.debug("debug log={}", name);
            log.info("info log={}", name);
            log.warn("warn log={}", name);
            log.error("error log={}", name);
    
    
            return "ok";
        }
    }

    /log-test URI 요청시 출력된 로그

     

    [시간] [로그 레벨] [프로세스 ID] [쓰레드 명] [클래스명] [로그 메시지]

     

     

     

    @Slf4j

     

    • 라이브러리들을 하나의 통일된 방식으로 사용할 수 있는 방법을 제공
    • 자동으로 해당 코드를 넣어준다.
    • private final Logger log = LoggerFactory.getLogger(getClass());

     

    로그 레벨(Log Level)

     

    • debug와 trace 레벨의 로깅은 개발 단계에서만 사용(용량 문제), 개발 단계에서는 사용 x
    • tace : debug보다 세분화된 정보
              모든 레벨에 대한 로깅이 추적되므로 개발 단계에서 사용함
    • debug : 디버깅하는데 유용한 세분화된 정보
                 개발 단계에서 사용하며, SQL 로깅을 할 수 있음
    • info : 진행상황 같은 일반 정보
    • warn : 오류는 아니지만 잠재거인 오류 원인이 될 수 있는 경고성 정보
               당장 서비스 운영에는 영향이 없지만 주의해야 할 부분
    • error : 요청을 처리하는 중 문제가 발생한 오류 정보
               예상하지 못한 심각한 문제가 발생, 즉시 조치를 취해야 하는 수준의 레벨
    728x90
    반응형

    댓글

Designed by Tistory.