프로젝트 관련해서 log를 일반로그와 error 로그를 관리하고 싶다는 요청이 들어왔고
logback.xml 파일을 사용한 로깅 설정이 되어있지 않았다.
logback-spring.xml 파일을 통한 설정을 진행했고 소스 코드는 아래와 같다.
logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<springProperty name="filePath" source="logging.file.path"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="APP_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${filePath}/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${filePath}/app.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>1GB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${filePath}/error.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${filePath}/error-%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT"/>
<appender-ref ref="APP_FILE"/>
<appender-ref ref="ERROR_FILE"/>
</root>
</configuration>
application.yml
logging:
file:
path: /Users/hong/Logs/kotlin-spring
springProperty 태그로 application.yml에 있는 값을 가져올 수 있다.
태그명과 값을 보면 어떤 설정인지 대강 알 수 있다.
app.%d{yyyy-MM-dd}.%i.gz : 하루가 지나면 압축하여 파일을 저장
maxFileSize = 분할 용량
maxHistory = 보관할 최대 파일 수를 제어하고 이전 파일을 삭제
totalSizeCap - 전체 파일 크기를 제어하며, 전체 크기 제한을 초과하면 가장 오래된 파일을 삭제
totalSizeCap을 사용하기 위해서는 maxHistory가 필수 속성으로
maxHistory와 totalSizeCap의 우선순위는 maxHistory가 우선
'대성 API 개발' 카테고리의 다른 글
API 개발 관련 이슈 모음 (0) | 2022.11.09 |
---|