개요
@Sl4j 로 SpringBoot는 기본 로거를 내장하는데
요녀석으로 로깅 정책, 패턴, 저장 위치를 결정할 수 있다
logback-spring.xml
main/resources 에 두면된다.
주석을 참고하자. 본 프로젝트에 갈기면된다.
로그 레벨에 따라 프로젝트 루트에
- logs/error.log
- logs/info.log
- logs/warn.log
'RollingFileAppender' 클래스를 통해 최대 용량 혹은 보관기간이 지나면 새 파일을 저장한다.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOGS_ABSOLUTE_PATH" value="./logs"/>
<!-- [LOG LEVEL] 5단계 -->
<!-- TRACE > DEBUG > INFO > WARN > ERROR > OFF-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}:%-3relative][%thread] %-5level %logger{36} - %msg%n</Pattern>
</layout>
</appender>
<!-- [Appender] : Log 형태 및 출력 위치를 설정하는 영역 -->
<!-- ConsoleAppender: 콘솔에 출력, RollingFileAppender: 여러 파일을 순회하며 로그 저장 -->
<appender name="STDERR" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}:%-3relative][%thread] %-5level %logger{36} - %msg%n</Pattern>
</layout>
</appender>
<appender name="INFO_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOGS_ABSOLUTE_PATH}/info.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<!-- 로그 레벨이 맞지 않는경우 무시 -->
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}:%-3relative][%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>./was-logs/info.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<appender name="WARN_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- file: 파일 경로 -->
<file>${LOGS_ABSOLUTE_PATH}/warn.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!-- 로깅 패턴 -->
<encoder>
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}:%-3relative][%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>./was-logs/warn.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 최대 보관주기 -->
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<appender name="ERROR_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOGS_ABSOLUTE_PATH}/error.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 레벨은 반드시 대문자로 지정 -->
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>%d{yyyyMMdd HH:mm:ss.SSS} [%thread] %-5level [%logger{0}:%line] - %msg %n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>application_error.log.%d{yyyy-MM-dd}.gz</fileNamePattern>
<maxHistory>30</maxHistory>
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
</appender>
<!-- root 전역설정 -->
<root level="INFO"> <!-- 하위 TRACE, DEBUG level 은 무시됨. -->
<!-- 출력될 타겟 지정-->
<appender-ref ref="STDOUT"/>
<appender-ref ref="INFO_LOG"/>
<appender-ref ref="WARN_LOG"/>
<appender-ref ref="ERROR_LOG"/>
</root>
<!-- logger 지역 설정 (패키지별 설정가능) -->
<logger name="org.hibernate.SQL" additivity="false">
<level value = "DEBUG" />
<appender-ref ref="INFO_LOG" />
</logger>
</configuration>
logback-test.xml
test/resources 에 위치한다.
테스트 코드를 실행하는데 있어서 스프링 딱 시작하자마자 뜨는 설정 관련 로그는 굳이 볼 필요가 없다.
ERROR 레벨 미만의 코드는 무시하자.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<!-- 테스트 코드에서 springframework context load, configuration 관련 로그 레벨 error 미만 무시 -->
<logger name="org.springframework.core " level="error"/>
<logger name="org.springframework.beans" level="error"/>
<logger name="org.springframework.context" level="error"/>
<logger name="org.springframework.transaction" level="error"/>
<logger name="org.springframework.web" level="error"/>
<logger name="org.springframework.test" level="error"/>
<logger name="org.hibernate" level="error"/>
</configuration>
Options
%logger{0}
`0` 은 무제한 길이를 의미, 로거 명과 패키지와 클래스명이 필요 없을 때 사용
[%logger{0}:%line]
라인번호를 맨 끝에 붙임.
디버깅 목적일때 유용하다.
'JVM > Spring' 카테고리의 다른 글
[Spring] 환경 분리 방법 (2) | 2023.10.29 |
---|---|
[Spring] Servlet Container, Servlet (0) | 2023.03.19 |
[Spring] ConfigurationProperties + ConfigurationPropertiesScan (0) | 2023.02.13 |
[SpringBoot] Naming methods in each layer (0) | 2023.02.09 |
[Spring] Library 살펴보기 및 스프링 환경설정 (0) | 2022.12.12 |