Spring에서 제공하는 기능과 Spring Boot에서 제공되는 기능 구분 주의!!
일련의 사건을 시간의 경과에 따라 기록하는 것
trace - debug - info - warn - error - off
ex) Log Level → warn
warn, error level의 log만 생성
ex) Log Level → debug
debug, info, warn, error의 log만 생성
public class KdtApplication {
private final static Logger logger = LoggerFactory.getLogger(KdtApplication.class);
public static void main(String[] args) {
...
logger.info("version -> {}", orderProperties.getVersion());
...
}
}
logback layout: 어떤 형식으로 log를 생성하는지 설정
<property name="CONSOLE_LOG_PATTERN" value ="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
Appender
어디에 어떤 포맷을 남길지 설정
ConsoleAppender
log가 콘솔에 출력된다.
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
FileAppender
log를 파일에 기록한다.
working directory 기준으로 logs라는 디렉토리의 kdt.log 파일에 로그를 기록한다.
<appender name="FILE1" class="ch.qos.logback.core.FileAppender">
<file>logs/kdt.log</file>
<append>false</append> <!-- false로 설정한 경우 파일을 매번 덮어 쓴다.-->
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
</appender>
어플리케이션 실행 시점마다 다른 로그 파일을 생성한다.
<timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/>
<appender name="FILE2" class="ch.qos.logback.core.FileAppender">
<file>logs/kdt_${bySecond}.log</file>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
</appender>
RollingFileAppender(TimeBasedRollingPolicy)
장시간 구동되는 서버 환경에서 많이 사용되는 appender이다.
TimeBasedRollingPolicy: 특정 시간이 지나면 파일이 만들어 진다.
<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/access.log</file> O --- (1)
<file>logs/access.log</file> X --- (2)
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/access-%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
(1) <file>logs/access.log</file>
있는 경우
2022년 04월 08일 어플리케이션 시작, access.log 생성 및 기록 →
2022년 04월 09일 00시 기존 access.log가 access-2022-04-08.log로 변경되고 새로운 access.log(for 2022년 04월 09일) 생성
(2) <file>logs/access.log</file>
없는 경우
2022년 04월 08일 어플리케이션 시작, access-2022-04-08.log 생성 →
2022년 04월 09일 00시, access-2022-04-09.log 생성
최신 log는 access.log만 확인하면 된다.
logger
additivity: false
를 설정해야 한다. <logger name="org.prgms.kdt" level="info" additivity="false">
<appender-ref ref="STDOUT"/>
</logger>
<root level="warn">
<appender-ref ref="STDOUT" />
</root>
conversion
conversion 직접 추가할 수 있으며 conversion에는 변수도 지정할 수 있다(red, yellow)
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter">
</conversionRule>
<property name="CONSOLE_LOG_PATTERN" value ="%clr(%d{HH:mm:ss.SSS}){cyan} [%thread] %-5level %logger{36} - %msg%n"/>
@SpringBootApplication이 있는 파일 기준 하위 패키지로 컴포넌트 스캔을 진행한다.
직접 작성하는 프로퍼티의 우선순위가 가장 낮다.
Spring Boot의 Maven 플러그인을 이용하여 jar 패키지를 생성할 수 있다.