스프링 Boot - 로깅 (Logging)

600g (Kim Dong Geun)·2020년 9월 9일
0

본 글은 나중에 내가 볼려고 정리한 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.TRACEDEBUG레벨보다 좀 더 상세한 메시지

로그 레벨은 우선 순위가 정해져 있어서 특정 로그 레벨을 지정하면 상위 우선순위 로그가 모두 출력된다. 예를 들어 DEBUG로 지정하면 DDEBUG를 시작으로 INFO,WARN,ERROR 메시지가 모두 출력된다. 만약 WARN으로 지정하면 WARN,ERROR 에 해당하는 로그 메시지만 출력된다.

따라서 개발단계에서는 DEBUG나 TRACE로 설정하지만 실제 운영 단계로 넘어가면 WARN 이상의 레벨로 조정해야 한다.

어플리케이션에서 로그 출력하기

LoggerClass를 만든다고 생각해보자

  • LoggingRunner.java

@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의 로그 메시지를 출력하소 싶다면 외부 프로퍼티 파일을 수정해야한다.

  • application.properties(yml)
logging.level = debug

만약, 특정 패키지만의 로그레벨을 설정하고 싶다?
다음과 같이도 가능하다.

logging.level.com.x.y.z = debug
profile
수동적인 과신과 행운이 아닌, 능동적인 노력과 치열함

0개의 댓글