Spring/boot

[Spring-boot] Logging

jay Joon 2021. 1. 16. 02:17

Logging

spring-boot 은 기본적으로 Logback 이 로깅에 사용된다.

image

 

 

Logback 은 SLF4 J의 구현체이며 자바 오픈소스 로깅 프레임워크이다.

LogBack을 xml configration 이용할 때 3가지의 주요 설정이 있는데 다음과 같다.

 

 

  1. Appender

    로그 메시지를 출력할 대상을 결정함 (console , file, DB 등).

  2. Encoder

    로그 메시지의 포맷을 지정함.

  3. Logger, root

    appender를 읽어 로그를 출력할 package와 log level을 설정함.

상세 설정은(http://logback.qos.ch/manual/index.html참고

 

Example

<configuration>

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!-- encoders are assigned the type
         ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>

  <logger name="chapters.configuration" level="INFO"/>

  <!-- Strictly speaking, the level attribute is not necessary since -->
  <!-- the level of the root level is set to DEBUG by default.       -->
  <root level="DEBUG">          
    <appender-ref ref="STDOUT" />
  </root>  

</configuration>

예제를 분석해보자면

  1. STDOUT의 ConsoleAppender 임으로 log를 콘솔 창에 출력

  2. STDOUT의 로그 메시지의 출력 포맷은 % d {HH:mm:ss.SSS} [% thread] %-5 level % logger {36} - % msg% n 다음과 같음.

  3. chapters.configuration 패키지의 로그를 INFO 레벨로 출력.

  4. 전체 패키지(root)는 STDOUT appender를 참고하여 DEBUG 레벨로 로그 출력.

이제 Spring-boot에서 LogBack을 설정하는 방법을 알아보자.

spring-boot에서는 application.properties 에서 간단히 설정이 가능하다.

 

  1. 패키지별 로그 레벨 수준 설정

    logging.level.{FQCN} = {level}

    ex) logging.level.root = info (전체 로깅 레벨 INFO)

    ex) logging.level.com.jaejoon.dao = debug (특정 패키지 로깅 레벨 DEBUG)

  1. 로그 파일 출력 설정

 

 

  1. 로그 파일 회전 설정.

    이름 기술
    logging.logback.rollingpolicy.file-name-pattern 로그 저장소를 만드는 데 사용되는 파일 이름 패턴입니다.
    logging.logback.rollingpolicy.clean-history-on-start 애플리케이션이 시작될 때 로그 아카이브 정리가 발생해야 하는 경우.
    logging.logback.rollingpolicy.max-file-size 보관되기 전 로그 파일의 최대 크기입니다.
    logging.logback.rollingpolicy.total-size-cap 로그 아카이브를 삭제할 수 있는 최대 크기입니다.
    logging.logback.rollingpolicy.max-history 로그 아카이브 보관 일수 (기본값 : 7)

 

위의 설정을 응용하면 이런 식으로 구성할 수 있다.

local_path =C:/Users/dkans/Desktop/logs/
logging.level.root=debug
logging.file.name=${local_path}myapp.log
logging.logback.rollingpolicy.max-history=1000
logging.logback.rollingpolicy.max-file-size=4KB
logging.logback.rollingpolicy.file-name-pattern=${logging.file.name}.%d{yyyy-MM-dd}.%i.text

로그 결과물

image

 

 

커스텀 로그 설정 파일 사용하기

loSpring-boot는 classpath에 있는 logback-spring.xml을 참조한다.

즉 resources 디렉터리 아래에 logback-spring.xml 파일을 생성해주면 된다.

image

 

주의) application.properties 파일에 있는 log 설정이 먼저 설정하고 다시 logback-spring.xml이 설정되기 때문에

application.properties 파일에 log설정은 적용되지 않습니다.

 

 

따라서 logback-spring.xml 에 다음과 같이 설정하면 프로퍼티들을 가져다가 사용할 수 있음.

image

 

profile 별로 사용할 로그 프로퍼티 파일을 정의 후

image

 

logback-spring.xml 에서 다음과 같이 작성해보자.

<springProfile name="{profileName}">
    <property resource="{적용할 profile name}"/>
</springProfile>

<property name ="{사용할 변수명}" value="${적용할 profile 에 들어있는 key 값}"/>

이런 식으로 작성하면 프로퍼티들을 가져다가 적용할 수 있다.

logback.xml 설정은 위에서 설명했으니 생략.