본문 바로가기

Spring Boot

log file 날짜별 rolling 설정

그동안 log file을 rolling 없이 관리했는데, 그냥 그러다가 문득 rolling 설정을 해야겠다는 생각이 들어서 해보았다.

나는 `xml`로 설정을 진행하였다.

 

1. `appender` 추가

<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>logs/refill.log</file>
    <encoder>
        <pattern>%d [%thread] %-5level %-50logger{40} - %msg%n</pattern>
    </encoder>

    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>logs/refill-%d{yyyy-MM-dd}.log</fileNamePattern>
    </rollingPolicy>
</appender>

위와 같이 `appender`를 `configuration tag` 밑에 추가해줘야 한다.
기본적으로 하나의 파일에 모든 log가 저장된다. 그 하나의 파일명을 정해주는 게 `file tag`이다. 

`encoder`는 log 파일에 저장될 log들의 pattern을 지정해준다.

`rollingPolicy`는 파일 rolling 설정에 관한 정책을 정하는 `tag`이다.
나는 `TimeBasedRollingPolicy`를 사용해 시간을 기준으로 `log` 파일을 rolling하고있지만,
`SizeAndTimeBasedRollingPolicy`와 같은 정책을 사용하면 시간과 파일크기를 기준으로 rolling할 수도 있다.
(자세한 건 검색해보자!!)

내가 운영하는 서비스는... 슬프게도 사람들이 별로 안 온다.

그래서 그냥 날짜로만 분류해도 충분하다고 생각해서 시간 기준으로만 찍고 있다.
만약 나중에 로그 파일이 너무 커서 보기 힘들면 RollingPolicy를 바꿀 수도 있을 거 같다.

 

2. `root`에 `appender-ref` 추가

<root>
    <level value="INFO"/>
    <appender-ref ref="ROLLING_FILE"/>
    <appender-ref ref="CONSOLE"/>
</root>

위와 같이 위에서 만든 `ROLLING_FILE appender`를 `appender-ref`로 등록해줘야 한다.
`root`는 `configuration` 밑에 있어야 한다.

 


참고용 전체코드 

logging:
  config: classpath:logback.xml

`application.yml`에 위와 같이 설정할 `xml` 파일을 등록해준다.

 

<?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"/>

    <appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/refill.log</file>
        <encoder>
            <pattern>%d [%thread] %-5level %-50logger{40} - %msg%n</pattern>
        </encoder>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/refill-%d{yyyy-MM-dd}.log</fileNamePattern>
        </rollingPolicy>
    </appender>

    <root>
        <level value="INFO"/>
        <appender-ref ref="ROLLING_FILE"/>
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

위 2개의 `include`와 `CONSOLE`을 등록하는 `appender-ref`는 꼭 빼먹지 말고 써야 한다.
그렇지 않으면 `CONSOLE`에 log가 찍히지 않아 정말 답답해질 수 있다.