본문 바로가기

Spring

Spring 로깅

- 스프링 운영 시스템에서는 System.out.println()과 같은 시스템 콘솔을 통해서 정보를 출력하지 않고,

  별도의 로깅 라이브러리를 사용합니다. 

  실무에서는 항상 로그를 사용해야 합니다. 

  이번 글에서는 스프링에서 사용하는 로깅 라이브러리에 대해 알아보겠습니다. 

 

1) 로그 레벨과 로그 포맷(feat. Slf4j, Logback)

- Slf4j는 스프링 로깅 기능을 제공하는 인터페이스입니다. 

  Logback은 그 구현체인 로깅 라이브러리입니다. 

  Slf4j를 활용한 예시 코드는 다음과 같습니다. 

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class LogTestController{

  private final Logger log = LoggerFactory.getLogger(getClass());
  
  @RequestMapping("/log-test")
  public String logTest(){
     String name = "Spring";
     
     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";
  }
}

(1) 로그 레벨

- 로그 레벨에는 TRACE, DEBUG, INFO, WARN, ERROR가 존재합니다. 

  application.properties에서 다음과 같이 로그 레벨을 설정할 수 있습니다.

# 전체 로그 레벨 설정(기본 info)
logging.level.root = info

 - 이 때, 로그 레벨 설정은 TRACE > DEBUG > INFO > WARN > ERROR 순입니다.

   즉, logging.level.root = info로 설정하면, INFO를 포함한 하위 레벨인

   INFO, WARN, ERROR 로그를 볼 수 있습니다. 

   보통 개발 서버는 logging.level.root = debug로 설정하고,

   운영 서버는 logging.level.info를 설정합니다.  

 

(2) 로그 포맷

로그가 출력되는 포맷은 시간, 로그 레벨, 프로세스 ID, 쓰레드 명, 클래스 명, 로그 메시지 입니다.

(

(3) @Slf4j 어노테이션 활용

- 또한, 로깅 라이브러리는   

private final Logger log = LoggerFactory.getLogger(getClass());

  와 같은 선언 없이, @Slf4j 어노테이션 만으로 사용할 수 있습니다. 

  

 

2) 로그 사용시 장점

- 로그 사용시 여러 가지 장점이 있습니다. 

  그것은 다음과 같습니다. 

  

(1) 쓰레드 정보, 클래스 이름 같은 부가 정보를 함께 볼 수 있고, 출력 모양을 조절할 수 있습니다.

(2) 로그 레벨에 따라, 개발 서버에서는 모든 로그를 출력하고, 운영서버에서는 출력하지 않는 등

      로그를 상황에 맞게 조절할 수 있습니다.

(3) 시스템 아웃 콘솔에만 출력하는 것이 아니라, 파일이나 네트워크 등,

      로그를 별도의 위치에 남길 수 있습니다. 

      특히, 파일로 남길 때는 일별, 특정 용량에 따라 로그를 분할하는 것도 가능합니다.

(4) 성능도 일반 System.out보다 좋습니다.

 

- 따라서 실무에서는 반드시 로그를 사용해야 합니다.

 

 

참고

김영한 스프링 MVC 1편

 

 

 

 

'Spring' 카테고리의 다른 글

스레드 풀  (0) 2022.08.14
싱글톤 컨테이너  (0) 2022.08.13
서블릿  (0) 2022.07.27
의존관계 주입(Dependency Injection)  (0) 2022.07.25
IoC, DI  (0) 2022.06.18