본문으로 바로가기

spring boot logging 설정

category 프로그래밍 & IT/Spring & HTML 2017.01.29 17:54

처음 프로젝트를 시작하면서 프레임워크를 구성할 때, 가장 먼저 해야 하는 것이 로깅 설정이라고 생각한다.

로깅 설정이 되어 있더라도 나부터도 귀찮아서 sysout을 일단 찍고 보는데.. 로깅을 지원하지 않으면 상상도 하기 싫다.


기본적으로 Spring boot는 Java Util Logging,Log4J2 and Logback. 기능을 지원한다.


별다른 설정을 하지 않는다면 기본 스프링부트 로그 레벨은 info이다.


물론 classpath에 logback.xml이나 logback-spring.xml에 설정을 하는 것으로 커스텀 로그를 찍을 수 있지만 굳이 당장 그렇게 까지 할 필요는 없기에 만능 application.properties를 사용해서 쉽게 설정할 수 있다.


logging 관련 설정 프로퍼티는 아래와 같다.


# LOGGING

logging.config= # Location of the logging configuration file. For instance `classpath:logback.xml` for Logback

logging.exception-conversion-word=%wEx # Conversion word used when logging exceptions.

logging.file= # Log file name. For instance `myapp.log`

logging.level.*= # Log levels severity mapping. For instance `logging.level.org.springframework=DEBUG`

logging.path= # Location of the log file. For instance `/var/log`

logging.pattern.console= # Appender pattern for output to the console. Only supported with the default logback setup.

logging.pattern.file= # Appender pattern for output to the file. Only supported with the default logback setup.

logging.pattern.level= # Appender pattern for log level (default %5p). Only supported with the default logback setup.

logging.register-shutdown-hook=false # Register a shutdown hook for the logging system when it is initialized.



logging 레벨을 설정하는 세가지 방식에 대해 간단하게 살펴보자.


테스트를 위해 아래와 같은 컨트롤러를 만들었다.

  1. root레벨 설정
    logging.level.root=debug

    이 옵션은 root레벨 전체에 대해 debug 옵션을 적용한다.


    결과를 얻을 수는 있지만, 추천하지 않는다. root레벨부터 모든 Debug 로그를 출력하게 되는데, spring boot에서 물고있는 숨겨져있는 dependency들에 대한 모든 debug 로그를 출력해버린다.

    예시 같은 간단한 컨트롤러 하나 타는것에도 700라인 이상의 로그를 출력해 버린다.

  2. 패키지 단위별 설정

    logging.level.com:info

    logging.level.com.leafCat.common:debug

    logging.level.com.leafCat.common.user:error

    이런 식으로 가장 상위 패키지를 디폴트로 레벨을 설정하고, 하위 패키지들에 대한 단위별 로깅 레벨을 설정할 수 있다.

    패키지 단위기 때문에 외부 라이브러리가 아닌 내가, 우리 팀이 만든 코드들에 대해서만 로깅할 수 있다.



  3. 별도 옵션
    ->debug:true
    이 옵션은 log4j나 Logback같은 외부 라이브러리 로깅 옵션과는 관계가 없는 듯 하다.

    각종 로그들이 출력 되긴 하지만, 내가 직접 코딩한 debug 레벨의 logger를 반영하지 않는다. 디폴트 설정인 info 레벨의 logger만 출력할 뿐이다.
    대신, spring boot에서 판단하기에 필요한 debug 정보라고 판단되는 로그들을 출력해 준다.
    (내가 잘못 알고 있는 것일 가능성이 크다 - 나중에 확인해 볼 것

    이 옵션과 패키지 단위별 설정을 적절히 조합하는 것도 좋을 듯 하다.


쿼리 로그를 보다 상세하게 남기기 위한 log4jdbc 설정은  http://www.leafcats.com/45 를 참고 바란다.


spring boot로 처음 하나하나 셋팅하다 보니, 일반 spring에 비해 확실히 개발자하 해야 할 일이 줄어들고 편리해졌다.

다만 '이미 알아서 되어 있는' 부분들이 많기 때문에 주의해야 할 점도 분명 존재한다.



 Other Contents 

댓글을 달아 주세요