이번 포스팅에는 Spring profile 별, 에러 레벨 별로 다른 로그 정책을 설정하는 방법에 대해 소개해보겠습니다.
지난 포스팅에 살짝 언급했듯 Spring은 기본 로깅 전략을 담은 파일을 갖고 있습니다.
<!--> base.xml <-->
<included>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</included>
지난 포스팅에 소개했었던 console-appender와 file-appender를 사용하고 INFO 레벨일 때 해당 appender를 적용하는 설정 파일이고, 우리가 스프링을 실행하면 볼 수 있는 로그이기도 합니다.
{LOG_FILE:- default} 형태는 LOG_FILE이라는 property가 존재하지 않을 경우, 기본 값으로 default를 사용하겠다는 의미입니다.
property는 <property name = "LOG_FILE" value = "error.log"> 와 같이 key-value 형태로 지정할 수 있습니다.
어떠한 로그 설정도 없으면 이 설정 파일에 맞게 로그를 생성합니다. 하지만 우리는 우리의 입맛에 맞게 로깅 설정을 하고 싶습니다. (파일 등등 ..)
그럴 땐 어떻게 할 수 있을까요?
Spring - Configure Logback for logging
스프링 공식 문서에서는 아래와 같이 설명합니다.
logback.xml 이나 Boot에서 제공하는 템플릿 기능의 이점을 누리기 위한 logback-spring.xml 을 루트 클래스 path에 설정해두면 Spring이 해당 전략을 선택합니다.
즉, Spring Boot에서 로그백 설정을 하기 위한 가장 최적의 방법은 root class path에 logback-spring.xml 파일을 생성하는 것입니다.
logback-spring.xml
이제 파일을 하나 생성하고 기본 틀을 작성해봅니다.
<configuration>
</configuration>
간단하게 로그백 설정의 시작을 알리는 코드라고 생각하면 좋습니다. 상세 내용은 링크를 참조하세요. 다양한 기능들이 있으니 꼭 봐두면 좋을 것 같습니다.
먼저, 원하는 로깅 전략을 appender 설정으로 하나 생성합니다.
<configuration>
<appender name="file-error-logger" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>error</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<file>${LOG_PATH}/error.log</file>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<charset>utf-8</charset>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/error-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
<maxFileSize>10MB</maxFileSize>
<maxHistory>7</maxHistory>
</rollingPolicy>
</appender>
</configuration>
ERROR레벨의 로그만 허락하는 filter를 가진 RollingFileAppender가 하나 생겼습니다. 이 appender의 이름은 file-error-logger입니다.
이제부터 Spring의 설정을 넣어보겠습니다.
<configuration>
<!-->file-error-logger 생략..<-->
<springProfile name="local">
<logger name="com.example" level="ERROR">
<appender-ref ref="file-error-logger"/>
</logger>
</springProfile>
</configuration>
- <springProfile> : 이 설정은 실행 profile 별로 다른 로깅 설정을 참조할 수 있도록 돕습니다. 지금처럼 local하나만 설정할 수도 있고, dev, prod 이런 식으로 두가지의 profile에 걸쳐 함께 설정을 사용하도록 유지할 수도 있습니다.
- <logger> : name 하위 클래스, ERROR 레벨을 대상으로 범위를 지정합니다.
- <appender-ref> : appender의 이름으로 로깅 설정을 참조합니다.
이제 끝입니다. 하지만 이 상태로 실행한다면, 기본 로그가 보이지 않습니다. LogBack은 logback-spring.xml을 먼저 탐색하고 없을 경우 base.xml을 참조하여 로깅하는데 지금은 base.xml을 탐색하지 못하고 있죠. 따라서 INFO레벨의 로그에 대해서는 아래와 같이 추가해줄 수 있습니다.
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/> <!-->최상위에 둠으로써 모든 spring profile INFO 레벨에 적용<-->
<!-->file-error-logger 생략..<-->
<springProfile name="local">
<logger name="com.example" level="ERROR">
<appender-ref ref="file-error-logger"/>
</logger>
</springProfile>
</configuration>
이처럼 Spring Profile별로 로그 전략을 달리 설정할 수 있습니다. 만약 로그 설정이 많아진다면 <included>와 <include resource> 그리고 <appender-ref>를 이용하여 로그 설정을 분리하고 가독성을 높일 수 있습니다.
이것으로 Spring Profile 별 로깅 설정 방법에 대한 글을 마치겠습니다 !!
'우아한테크코스 4기 > 레벨3' 카테고리의 다른 글
의존관계 분리 경험 공유(2) (0) | 2022.08.10 |
---|---|
의존관계 분리 경험 공유(1) (0) | 2022.08.10 |
[Logback] Spring Logback configuration 과정 (1) - Appenders (0) | 2022.07.16 |
[Linux] Shell Script로 자기소개하기 (0) | 2022.07.11 |