Spring MVC - 로깅 간단히 알아보기

1. 로깅


실무에서는 System.out.println() 같은 시스템 콘솔을 사용해서 필요한 정보를 출력하지 않고, 별도의 로깅 라이브러리를 사용해서 로그를 출력하므로 이에 대해 간단히 알아보고자 한다. 스프링 부트 라이브러리를 사용하면 스프링 부트 로깅 라이브러리가 함께 포함된다. 스프링 부트 라이브러리는 기본으로 다음 로깅 라이브러리를 사용한다.

  • SLF4J
  • Logback

로그 라이브러리는 수 많은 라이브러리가 있는데, 그것을 통합해서 인터페이스로 제공하는 것이 SLF4J 라이브러리다. 쉽게 생각하면 SLF4J는 인터페이스이고 그 구현체로 Logback 같은 로그 라이브러리를 선택하면 된다. 스프링 부트가 기본으로 Logback을 제공하므로 대부분 Logback을 사용한다.

2. 로그를 사용하는 이유


  • 쓰레드 정보, 클래스 이름 같은 부가 정보를 함께 볼 수 있고, 출력 모양 조정 가능
  • 로그 레벨에 따라 개발 서버는 모든 로그를 출력하고, 운영서버에는 출력하지 않는 등 로그를 상황에 맞게 조절 가능
  • 시스템 아웃 콘솔에만 출력하는 것이 아니라, 파일이나 네트워크 등 로그를 별도의 위치에 남길 수 있다. 파일로 남길 때는 일별, 특정 용량에 따라 로그를 분할하는 것도 가능
  • 성능도 System.out보다 좋다.


3. 사용법


@RestController 
//@Slf4j 애노테이션은 private final Logger log = LoggerFactory.getLogger(getClass()); 코드를 대신한다. 
public class LogTestController {
    // 로그 사용하기 위한 작업, getClass는 현재 클래스가 나옴
    private final Logger log = LoggerFactory.getLogger(getClass());

    @RequestMapping("/log-test")
    public String logTest(){
        String name = "spring";   

        //  {}는 쉼표 뒤에 파라미터가 치환되는 것
        log.trace("trace log={}",name);
        log.debug("trace log={}",name);
        log.info("trace log={}",name);  
        log.warn("trace log={}",name);
        log.error("trace log={}",name);

        return "ok";
    }
}

private final Logger log = LoggerFactory.getLogger(getClass()) 으로 초기화한 log를 가지고 로그 레벨별로 출력이 가능하다. {} 대괄호는 쉼표 뒤에 파라미터를 넘기는 형식으로 동작한다.

  • 로그 레벨 : TRACE > DEBUG > INFO > WARN > ERROR
    • 로그레벨 기본값은 info
    • trace로 찍으면 전체가 다 찍히고, debug로 찍으면 trace 제외하고 다찍힌다는 의미의 레벨이다.
  • 개발 서버는 debug, 운영 서버는 info로 설정해주는 것이 좋다.
  • lombok의 @Slf4j 애노테이션은 log 초기화 코드를 대신한다.
  • application.properties에서 로그 레벨 설정 가능
    • 예시) logging.level.hello.springmvc=trace : hello.springmvc 패키지와 그 하위의 로그 레벨을 trace로 설정
    • 예시) logging.level.root=info : 전체 레벨 info로 설정



본 포스팅은 인프런 김영한님의 ‘스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술’ 강의를 듣고 정리한 내용을 바탕으로 복습을 위해 작성하였습니다. [강의 링크]


© 2021. By Backtony