๐Springboot ์ Logback ์ ์ฉํ๊ธฐ
๐์์ ๊ณ๊ธฐ?
์ฐ๋ฆฌ ํ ์ ๋ฌด์ ํธ์์ฑ์ ์ํ ํ๋ก์ธ์ค๋ฅผ ๊ณ ๋ฏผํ๋ค๊ฐ ์ ์ฌ ์๊ฐ์ ๊ฐ๋ณ๊ฒ ๋ง๋ ํ๋ก์ ํธ(๋ฑ๋ก ์๋ฃ ์๋ ๊ฒ์, ์ด์ ํ๋ก์ธ์ค ์ด์ ์ ๋ฌด ์ฒดํฌ, RM ๋ฐ์ก ๋ฑ์ ๊ธฐ๋ฅ์ ํ์ฌํ ์๋ ๋ฐฐ์น ์์คํ )๋ฅผ ํ์์ ๊ฒฉํ๊ฒ ํ์ํด์ฃผ์ด ๊ฐ๋ฐ๊ณ์์ ์คํ ์ด์ง์ผ๋ก ์ฎ๊ธฐ๊ธฐ๋ก ํ๋ค ใ ใ
๋ฐฐ์น ํ๋ก์ธ์ค์ด๋ค ๋ณด๋ Scheduled ๊ธฐ๋ฅ์ ๊ฐ์ง ํ๋ก์ ํธ๋ค.
Linux OS ์์ jar๋ก ๊ฐ๋ณ๊ฒ ๊ตฌ๋ํ ๊ณํ์ด์๊ณ , ๊ธฐ์กด์๋ Tomcat์ war๋ก ๋น๋ํด์ lombok์ ๋ก๊ทธ๋ฅผ ์ฐ์์๋ค.
์ด์ ๋ ๋ณ๋ Log ํ์ผ๋ก ๊ด๋ฆฌํ ์์ ์ด๊ธฐ์ ๋ก๊ทธ ๊ฒฝ๋ก๋ ๋ฐ๋ก ์ก์์ฃผ์ด์ผ ํ๋ค.
๐logback-spring.xml
๊ฐ์ฌํ๊ฒ๋ SpringBoot ์์๋ ํ์ผ ๋ช ์นญ๋ง์ผ๋ก ์๋์ผ๋ก ์ธ์ํด์ฃผ๋ ํธ์์ฑ์ ์ ๊ณตํ๋ค.
๊ทธ ์ด๋ฆํ์ฌ.. "logback-spring.xml "
๐จ๐ป๐ปโจxml ๋ด์ฉ์ ์๋์ ๊ฐ๋ค.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- properties ๋ก ๋ชจ๋ ์ค์ ์ ๊ด๋ฆฌํ๊ณ ์ถ์ด์ ๋ณ๋๋ก property์ ์ถ๊ฐํ๋ค.
ํนํ๋ Log์ Level์ ์ค์ ํ ๋, properties ์์ ๋ง์ผ๋ก ์งํํ๊ณ ์ถ์๋๊ฒ ํฌ๋ค.
-->
<property resource="application.properties"/>
<!-- properties์ ์๋ ๊ฐ์ ๋ฐ๋ก ๋งตํํด์ฃผ๊ณ ์ถ์๋ค..-->
<property name="LOG_ROOT_LEVEL" value="${logging.root.level}"/>
<property name="LOG_FILE_PATH" value="${logging.file.path}"/>
<property name="LOG_FILE_NAME" value="${logging.file.name}"/>
<!-- ์ฆ๊ฒจ์ฐ๋ ๋ก๊ทธ ํฌ๋งท์ธ๋ฐ, ์ด๋์ ํ์์๋ ์๋ ํฌ๋งท์ ์ฌ์ฉํ๊ณ ์๋ค.-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>[%d{HH:mm:ss}] [%-5level] %logger{36}[line: %L] - %msg%n</Pattern>
</layout>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logging.file.path}/springBatchApi.log</file>
<encoder>
<Pattern>[%d{HH:mm:ss}] [%-5level] %logger{36}[line: %L] - %msg%n</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_FILE_PATH}/${LOG_FILE_NAME}</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- ํ์ผ ์ฌ์ด์ฆ๋ 5MB๋ฅผ ๋๊ธฐ์ง ์๋๋ก ํด์ ์ฉ๋์ ํฌ๊ฒ ์ฐจ์งํ์ง ์๋๋ก ํ๋ค.
๋ถ๊ฐ์๋น์ค์ธ ๋งํผ ๋ก๊ทธ๋ ์ต๋ํ ํ์์ ์ธ ๋ด์ฉ๋ง ๋ด๊ณ , ํ์์๋ ๋ถ๋ถ์ ๊ณผ๊ฐํ๊ฒ ์๋ตํ๋ค.
-->
<maxFileSize>5MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- ํ ๋ฌ ์ฃผ๊ธฐ์ ์ต๋์น์ธ 31-->
<maxHistory>31</maxHistory>
</rollingPolicy>
</appender>
<root level="${LOG_ROOT_LEVEL}">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE" />
</root>
<logger name="kr.co.ooweat.springBatchApi" level="${LOG_ROOT_LEVEL}">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE" />
</logger>
</configuration>
๐application.properties
์ด๋์ ๋ ๊ตฌ์์ ๊ฐ์ถ๋๊ฒ ์ข๊ฒ ๋ค.
#Logging ๋ถ๋ถ์ผ๋ก ๊ตฌ๋ถํ์ฌ ๋ฐ๋ก ๋ฑ๋กํด์ฃผ์๋ค.
"application.properties"
๐จ๐ป๐ปโจproperties ๋ด์ฉ์ ์๋์ ๊ฐ๋ค.
server.port=17882
#Logging
logging.root.level=INFO
logging.file.path=/app/service/springBatchApi/logs
logging.file.name=springBatchApi_%d{yyyy-MM-dd}_%i.log
#Use Flag
smtp.use.flag=y
kakao.use.flag=y
#Schedule
batch.morning.crond=0 40 7-9/1 * * ?
batch.halfHours.crond=0 */30 9-18/1 * * ?
batch.hours.crond=0 0 */1 * * ?
๐์ถ๊ฐ
๋ญ, ์ด ๊ธ์ ์ฐธ๊ณ ํ๋ ์ด๊ฐ ํ๋ก์ ํธ์์ ๊ธฐ์กด์ lombok ์ ์ฌ์ฉํ๊ฑฐ๋ Logger๋ฅผ ์ฌ์ฉํ์๋ค๋ฉด ๋ฑํ ์ด๋ ค์ด ์ ์ ์์ ๊ฒ ๊ฐ๋ค.