본 글은 나중에 내가 볼려고 정리한 Document 입니다.
본 포스팅은 스프링 부트 Quick Start를 참고하여 작성했습니다 📖
애플리케이션을 사용하다가 문제가 발생하면 가장 먼저 살펴보는게 로그메시지
다 그동안 난 뭘했단 말인가? 로그는 디버깅 할때도 필요하지만 실행 중인 애플리케이션의 성능 분석
이나 다양한 용도로 사용할 수 있다.
스프링 부트는 SLF4J (Simple Logging Facade for Java)
를 이용하여 로그를 관리한다. 이번 포스팅에서는 로그 설정을 추가하여 로그를 관리하는 것에 관해 다룰 예정이다.
스프링 부트가 사용하는
SLF4J
는 로깅 프레임워크가 아니다.
단지 복잡한 로깅 프레임워크들을 쉽게 사용할 수 있도록 도와주는 Facade
Interface에 불과하다.
스프링부트는 궁극적으로 SLF4J를 구현한 구현체인 LogBack
을 사용한다.
LogBack은 Log4j 개발자가 Log4j를 대체하기 위해 만들었다.
LogBack은 기존의 Log4j에 비해 성능이나 기능면에서 많은 장점들을 제공한다.
Level | 의미 |
---|---|
1.ERROR | 사용자 요청을 처리하는 중 문제가 발생함. |
2.WARN | 처리 가능한 문제지만, 향후 시스템 에러의 원인이 될 수 있음. |
3.INFO | 로그인이나 상태 변경과 같은 정보성 메시지 |
4.DEBUG | 개발 시 디버깅 목적으로 출력하는 메시지 |
5.TRACE | DEBUG레벨보다 좀 더 상세한 메시지 |
로그 레벨은 우선 순위가 정해져 있어서 특정 로그 레벨을 지정하면 상위 우선순위 로그가 모두 출력된다. 예를 들어 DEBUG
로 지정하면 DDEBUG를 시작으로 INFO
,WARN
,ERROR
메시지가 모두 출력된다. 만약 WARN
으로 지정하면 WARN
,ERROR
에 해당하는 로그 메시지만 출력된다.
따라서 개발단계에서는 DEBUG나 TRACE로 설정하지만 실제 운영 단계로 넘어가면 WARN 이상의 레벨로 조정해야 한다.
LoggerClass를 만든다고 생각해보자
@Service
public class LogingRunner implements ApplicationRunner{
private Logger logger = LoggerFactory.getLogger(LoggingRunner.class);
@Override
public void run(ApplicationArguments args) throws Exception {
logger.trace("TRACE");
logger.debug("DEBUG");
logger.info("INFO");
logger.warn("WARN");
logger.error("ERROR");
}
}
스프링 부트는 별도의 설정이 없으면 기본적으로 로그 레벨을 INFO로 처리한다.
따라서 다른 Level의 로그 메시지를 출력하소 싶다면 외부 프로퍼티 파일을 수정해야한다.
logging.level = debug
만약, 특정 패키지만의 로그레벨을 설정하고 싶다?
다음과 같이도 가능하다.
logging.level.com.x.y.z = debug