logback ์ค์ ํ๊ธฐ
์๋ฐ ๊ฐ๋ฐ์๋ผ๋ฉด ํ๋ฒ์ฏค์ ๋ค์ด๋ดค๊ณ , ํ๋ฒ์ฏค์ ์ฌ์ฉํ์๋ฒํ logger ๋ก log4j
๊ฐ ์์๊ฒ์ด๋ค. ํ์ง๋ง ์ต๊ทผ๋ค์ด logback
์ด๋ผ๋๊ฒ์ ์๊ฒ๋์๊ณ , ์ logback
์ ์ฌ์ฉํด์ผ ํ๋ ์ด์ ๋ผ๋ ๊ธ์ด ์์์ ๋๋ก ์ฌ๋ฌ ์ธก๋ฉด์์ ๊ฐ์ ์ด ๋๋ฏ ํ๋ค. (๋งํฌ)
์ด๋ฒ์ ์์ฑํ ๊ธ์ ๋ชฉ์ ์ logback
์ ์ค์ ํ๊ณ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง์ ๋ํด ์์ฑํด ๋ณด๊ณ ์ ํ๋ค.
โป ๊ณต์์ฌ์ดํธ : https://logback.qos.ch/
pom.xml
maven๊ตฌ์กฐ๋ผ๊ณ ๊ฐ์ ํ์๋ logback Dependency
๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด์๋ ์๋์ ๊ฐ์ด pom.xml ์ ์ค์ ํด ์ฃผ๋ฉด ๋๋ค.
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.7</version> <!--๋ฒ์ ์ ์ํฉ์ ๋ฐ๋ผ -->
</dependency>
๋ก๊ทธ๋ ๋ฒจ
ERROR
, WARN
, INFO
, DEBUG
or TRACE
# logback ์ค์ ํ์ผ
์ผ๋ฐ์ ์ผ๋ก logback.xml
์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ง๋ค์ด src/main/resources/
์๋์ ์์นํ๊ฒ ๋๋ค. Spring-Boot ํ๊ฒฝ์์๋ logback-spring.xml
์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ์ค์ ํด์ผ ํ๋๋ฐ logback.xml
๋ก ์ค์ ํ๋ฉด ์คํ๋ง๋ถํธ๊ฐ ์ค์ ํ๊ธฐ ์ ์ ๋ก๊ทธ๋ฐฑ ๊ด๋ จํ ์ค์ ์ ํ๊ธฐ ๋๋ฌธ์ ์ ์ดํ ์๊ฐ ์๊ฒ ๋๋ค.
( ๊ณต์์ฌ์ดํธ ๋ฉ๋ด์ผ : https://logback.qos.ch/documentation.html )
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<!-- ๋ณ์ ์ง์ -->
<property name="LOG_DIR" value="/logs" />
<property name="LOG_PATH_NAME" value="${LOG_DIR}/data.log" />
<!-- FILE Appender -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH_NAME}</file>
<!-- ์ผ์๋ณ๋ก ๋ก๊ทธํ์ผ ์ ์ฉํ๊ธฐ -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH_NAME}.%d{yyyyMMdd}</fileNamePattern>
<maxHistory>60</maxHistory> <!-- ์ผ์๋ณ ๋ฐฑ์
ํ์ผ์ ๋ณด๊ด๊ธฐ๊ฐ -->
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%-5p] [%F]%M\(%L\) : %m%n</pattern>
</encoder>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%-5p] [%F]%M\(%L\) : %m%n</pattern>
</layout>
</appender>
<!-- TRACE > DEBUG > INFO > WARN > ERROR, ๋์๋ฌธ์ ๊ตฌ๋ถ ์ํจ -->
<!-- profile ์ ์ฝ์ด์ appender ์ ์ค์ ํ ์ ์๋ค.(phase๋ณ ํ์ผ์ ์๋ง๋ค์ด๋ ๋๋ ์ข์ ๊ธฐ๋ฅ) -->
<springProfile name="local">
<root level="DEBUG">
<appender-ref ref="FILE" />
<appender-ref ref="STDOUT" />
</root>
</springProfile>
<springProfile name="real">
<root level="INFO">
<appender-ref ref="FILE" />
<appender-ref ref="STDOUT" />
</root>
</springProfile>
</configuration>
java ์ฝ๋ฉ์์์ ๋ก๊น
์ค์ ์ฌ์ฉ์ ๋ค์๊ณผ ๊ฐ์ด LoggerFactory
๋ฅผ ์ด์ฉํด์ ์ฌ์ฉํ๊ฑฐ๋ Lombok
์ด๋
ธํ
์ด์
์ ํ์ฉํ๋ฉด ์ฌํํ๊ฒ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- LoggerFactory ์ฌ์ฉ
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Foo {
static final Logger logger = LoggerFactory.getLogger(Foo.class);
public void test() {
logger.debug("ID : {}", "foo");
}
}
- Lombok ์ด๋ ธํ ์ด์ ์ฌ์ฉ
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class Foo {
public void test() {
log.debug("ID : {}", "foo");
}
}
๋ง์น๋ฉฐ
์ผ๋ฐ์ ์ธ ์น ์ดํ๋ฆฌ์ผ์ด์ ์์๋ WAS์์ ๋ก๊น ์ ๋ฐ๋ก ๊ด๋ฆฌํ๊ณ ์๊ธฐ ๋๋ฌธ์ file ๋ก ๋ก๊น ์ ํ ํ์๋ ์์๊ฒ ๊ฐ๋ค.(์ผ๋ฐ jar ํํ์์๋ ํ์ผ ๋ก๊น ์ด ํ์ ํ ์๋…)
์ฐธ๊ณ ์ฌ์ดํธ
Buy me a coffee