본문 바로가기
웹개발/Spring

[Spring Boot] 스프링부트 로그 관리 logback과 Slf4j

by PrimeJin 2021. 8. 14.

Spring Boot 로그 관리하기 (Slf4j 활용)

그동안 디버깅을 하면서 여러 문제나 중요한 정보들을 남기고 표시하기 위해
자바를 처음 배우면서부터 너무 익숙하게 써왔던 system.out.println()을 사용했는데
이는 프로그램의 성능을 떨어트리고 또한 로그를 파일에 저장하는 것이 불가능하다.

때문에 자바에서 지원하는 logging 라이브러리를 사용해서 로그를 관리하려고 한다.


로깅 라이브러리 구현체

log4j

  • Apache 재단에서 개발하여 2015년을 끝으로 개발 중단
  • 기존에 표준으로 가장 많이 사용되던 라이브러리 

logback 

  • 기존의 log4j 이후 같은 개발자가 개발하여 보다 향상된 성능(속도, 메모리 효율성)
  • Slf4j의 구현체로 Spring Boot에서는 spring-boot-starter-logging안에 기본적으로 포함되어 있어서 따로 dependency를 추가하지 않고 사용 가능

 

Slf4j (Simple Logging Facade for Java)

Slf4j는 뜻 그대로 로깅을 간단하게 사용할 수 있도록 하는 Facade로

로깅 라이브러리들을 하나의 통일된 방식으로 사용할 수 있는 방법이다.

즉, 위에 나온 구현체의 종류와 상관없이 로깅을 사용할 수 있다. (기본 구현체 -> logback)


로거 적용법

  • Logger 객체 선언하여 사용

 

  •  lombok의 @Slf4j 어노테이션 사용 (자동으로 설정된 log 객체를 사용한다.)

 


로그 레벨

TRACE < DEBUG < INFO < WARN < ERROR 

-로그 레벨에 따라 로그 메시지의 종류가 달라진다

-레벨은 출력 범위를 나타내고, 현재 레벨 이상의 로그만 화면에 출력된다

ex) INFO Level이면 INFO 레벨 이상의 로그(INFO, WARN, ERROR)만 화면에 출력

-log4j의 경우  FATAL(심각한 에러 발생 시) 레벨까지 포함

 

  • TRACE : 추적 레벨은 DEBUG보다 좀 더 상세한 정보를 표시
  • DEBUG : 프로그램을 디버깅하기 위한 정보를 표시 (운영 서버에서는 표시하지 않도록 설정)
  • INFO : 상태 변경과 같은 정보성 로그를 표시
  • WARN : 처리 가능한 문제, 시스템 에러의 원인이 될 수 있는 경고성 메시지를 표시
  • ERROR : 요청을 처리하는 중 오류가 발생한 경우 표시

 


로그 설정

Spring boot에서는 기본적으로 로그 설정이 되어있어서 application.yml(properties)에 세팅해도 설정이 가능하다.

  • 기본 레벨은 INFO 레벨로 설정되어 있다.
  • root : 전체 범위 레벨 설정
  • 패키지별로도 레벨 범위 설정 가능 (아래사진 참조)

 

Controller 패키지 ERROR 레벨 설정 전 ==> 작성해두었던 INFO 레벨 로그까지 기록된다.

Controller 패키지 ERROR 레벨 설정 후 ==> 패키지 내의 ERROR 레벨의 로그만 기록되므로 INFO 로그는 생략된다.


 

이 기본 설정 외에 더 자세하게 본인이 설정하려면 logback-spring.xml 파일을 resources 디렉터리에 만들어서 설정하면 된다.

  • 대소문자 구별 X
  • 크게 appender와 logger를 사용하여 설정
  • appender - 로그의 출력 형태(콘솔, 파일) 설정
  • logger - 로거마다 이름을 부여하여 사용, 패키지별 원하는 출력 레벨값 설정 (전역 설정 최상위 로거 = root)

 


우선은 logging 라이브러리를 활용하여 로그를 관리하는 방법에 대해서 적용하고 정리해봤다.

아직까지는 기본 설정 외에 크게 변경해서 따로 커스텀으로 사용하는 것 까지는 잘 모르겠어서

이 부분에 대해서는 내가 필요한 시점이 오면 더 공부하고 써본 후에 포스팅해보려고 한다.

 

참고
https://takeknowledge.tistory.com/59
https://dadadamarine.github.io/java/spring/2019/05/01/spring-logging-xml.html
https://ict-nroo.tistory.com/95

댓글