1. Logging library

스프링 부트 라이브러리를 사용하면 해당 라이브러리가 함께 포함된다.

- 스프링 부트 로깅 라이브러리는 SLF4J 로깅 라이브러리를 사용한다.

- 로그 라이브러리는 Logback, Log4J, Log4J2 등 수 많은 라이브러리가 있는데, 그것을 통합해서 인터페이스로 제공하는 것이 SLF4J 라이브러리다. 즉, SLF4J는 인터페이스이고 그 구현체로 Logback 같은 로그 라이브러리를 선택하면 된다.

 

2. 로그 선언 및 호출 방법

// 선언 방법 1 : 해당 class에 Logger 제공
private Logger log = LoggerFactory.getLogger(getClass());

// 선언 방법 2 : xxx class에 Logger 제공
private static final Logger log = LoggerFactory.getLogger(xxx.calss);

// 선언 방법 3 : Lombok library 이용
@Slf4j

// 호출 방법 : info level
log.info("hello!");

 

3. 로그 레벨

- LEVEL: TRACE > DEBUG > INFO > WARN > ERROR

- 개발 서버의 경우 debug 레벨을 주로 사용하고, 운영 서버의 경우 info 레벨을 주로 사용한다.

// 로그 레벨 설정 : application.properties

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

# hello.springmvc 패키지와 그 하위 로그 레벨 설정
logging.level.hello.springmvc = debug

 

4. 로그 성능 비교

log.debug("data = " + data);

- 로그 출력 레벨을 info로 설정해도 해당 코드에 있는 "data = " + data가 실제 실행이 되어 버린다.

- 문자 더하기 연산이 발생한다.

log.debug("data = {}", data);

- 로그 출력 레벨을 info로 설정하면 아무 일도 발생하지 않는다.

- 의미 없는 연산이 발생하지 않는다.

 

5. 로그 사용 장점

- 스레드 정보, 클래스 이름 같은 부가 정보를 함께 볼 수 있고, 출력 모양 또한 조절할 수 있다.

- 로그 레벨에 따라 개발 서버에서는 모든 로그를 출력하고, 운영 서버에서는 출력하지 않는 등 상황에 맞게 로그를 조절할 수 있다.

- 시스템 아웃 콘솔에만 출력하는 것이 아니라, 파일이나 네트워크 등 별도의 위치에 로그를 남길 수 있다. 특히 파일로 남길 때는 일별, 특정 용량에 따라 로그를 분할하는 것도 가능하다.

- System.out보다 성능이 좋다.

 

참고

- http://dveamer.github.io/backend/HowToUseSlf4j.html

- 『스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술』

'Spring' 카테고리의 다른 글

@Controller, @RestController 차이점  (0) 2021.11.12
@RequestMapping  (0) 2021.11.12
DispatcherServlet  (0) 2021.11.08
Bean Scope  (0) 2021.10.16
Bean LifeCycle & Callback  (0) 2021.10.11