์คํ๋ง ๋ถํธ ๋ก๊ทธ๋ฐฑ ์ด์ ์ค์
์คํ๋ง ๋ถํธ ํ๋ก์ ํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ๊ธฐ๋ณธ์ ์ธ ๋ก๊น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก์จ ๋ก๊ทธ๋ฐฑ์ด ์ฌ์ฉ๋ฉ๋๋ค. ์คํ๋ง ๋ถํธ์ ํฌํจ๋ org/springframework/boot/logging/logback/base.xml ํ์ผ์ ํ ๋๋ก ์ฝ์ ๋ฐ ํ์ผ๋ก ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ ์ ์๊ฒ ๊ธฐ๋ณธ๊ฐ์ด ์ ์๋์ด ์์ต๋๋ค. LoggingApplicationListener์ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋ ๋ ํธ์ถ๋๋ ์ฌ๋ฌ๊ฐ์ง ์ด๋ฒคํธ์ ์ํด LogbackLoggingSystem ์ผ๋ก์จ ๋ก๊ทธ๋ฐฑ ์ค์ ์ด ์ ์ฉ๋ฉ๋๋ค.
<?xml version="1.0" encoding="UTF-8"?>
<!--
Base logback configuration provided for compatibility with Spring Boot 1.1
-->
<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>
์์ ๊ฐ์ด ์ค์ ๋์ด์์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ก๊ทธ๋ ์ฝ์์ด๋ผ๋ ํ์ค ์ถ๋ ฅ์ ์ํด ๊ธฐ๋ก๋๋ ํธ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด์ํ๋ค๋ณด๋ฉด ๋ณด์ ๊ฐ์ฌ ํน์ ๋น์ฆ๋์ค ๋์์ ๋ํ ๊ฒ์ฆ์ ์ํด ์ผ๋ถ ๋ก๊ทธ๋ฅผ ๋ณ๋๋ก ๋จ๊ฒจ์ผํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์๊ตฌ์ฌํญ์ด ์๋ค๋ฉด ๊ธฐ๋ณธ์ ์ธ ๋ก๊ทธ๋ฐฑ ์ค์ ๋ณด๋ค๋ ์ด์์ ์ํ ์ปค์คํ ๊ตฌ์ฑ์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
logback-spring.xml
When possible, we recommend that you use the -spring variants for your logging configuration (for example, logback-spring.xml rather than logback.xml). If you use standard configuration locations, Spring cannot completely control log initialization.
์คํ๋ง ๋ถํธ ๊ณต์ ๋ฌธ์์ Custom Log Configuration์ ๋ํ ๋ด์ฉ์ ๋ฐ๋ผ logback-spring.xml ์ด๋ผ๋ ํ์ผ๋ช
์ผ๋ก ๋ก๊ทธ๋ฐฑ์ ๋ํ ์ค์ ํ์ผ์ ๊ตฌ์ฑํ๋ ๊ฒ์ด ํจ์จ์ ์
๋๋ค. Profile-specific Configuration์์ ์ค๋ช
ํ๋ ๊ฒ์ฒ๋ผ
ch.qos.logback.core.rolling.RollingFileAppender
์ค๋ฅ์ ๋ํ ๋ก๊ทธ๋ง ๋ณ๋๋ก ์ถ์ถํ์ฌ ๊ธฐ๋กํ๋ค๊ฑฐ๋ ํน์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ํ ๋ก๊ทธ๋ฅผ ๋ณ๋๋ก ๋๋์ด์ ๊ด๋ฆฌํ๊ณ ์ ํ๋ค๋ฉด FileAppender ๋๋ RollingFileAppender๊ณผ ํจ๊ป SizeAndTimeBasedRollingPolicy๋ฅผ ์ ์ฉํ์ฌ ์ํ๋ ์ถ๋ ฅ ํํ๋ก ๋ก๊ทธ๊ฐ ๋จ๋๋ก ๊ตฌ์ฑํ๋๊ฒ ์ข์ต๋๋ค.
<Configuration scan="true" scanPeriod="30 seconds">
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<property name="ERROR_LOG_FILE" value="${LOG_PATH}/error_${LOG_FILE}"/>
<appender name="ERROR_FILE" 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>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>${FILE_LOG_CHARSET}</charset>
</encoder>
<file>${ERROR_LOG_FILE}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN:-${ERROR_LOG_FILE}.%d{yyyy-MM-dd}.%i.gz}</fileNamePattern>
<cleanHistoryOnStart>${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false}</cleanHistoryOnStart>
<maxFileSize>${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-10MB}</maxFileSize>
<totalSizeCap>${LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP:-0}</totalSizeCap>
<maxHistory>${LOGBACK_ROLLINGPOLICY_MAX_HISTORY:-7}</maxHistory>
</rollingPolicy>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="ERROR_FILE" />
</root>
</Configuration>
๋ฆฌ๋ ์ค ์๋ฒ์ ๋ก๊ทธ ๋กํ ์ด์ ์ ๋ณ๋๋ก ํ์ฉ์ค์ด๋ผ๋ฉด ๊ตณ์ด ๋ก๊ทธ๋ฐฑ์์ RollingFileAppender๋ฅผ ์ฌ์ฉํ ํ์๋ ์๋ค.
์ ERROR_FILE appender๋ org/springframework/boot/logging/logback/file-appender.xml๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฑํ์์ผ๋ฉฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ฑ์ ์ํด ๊ฒฐ์ ๋ LOG_PATH์ error_๋ฅผ ํ์ผ๋ช ์ ํฌํจํ์ฌ ๋จ๊ธฐ๋๋ก ํ์ต๋๋ค.