Logback 에서 일정 개수의 로그 파일만 유지시키기

Logback 설정으로 로그 파일 개수를 제한하고 효율적으로 관리하는 방법을 안내해 드립니다.

logback-spring.xml 파일은 다음과 같이 설정할 수 있다.

주의할 점 : 

1. <pattern> 태그에서 Asia/Seoul 을 명시해줘야 시간이 제대로 표시해 주는 경우가 있음.

2. <maxHistory> 태그와 <cleanHistoryOnStart> 두 태그가 모두 있어야 로그 파일을 시스템이 정리해 줌 

(cleanHistoryOnStart 의 경우, 로그를 남기는 명령이 수행되면 한 번씩 체크한다.)

 

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!--
jdbc.sqlonly    : Logs only SQL
jdbc.sqltiming  : Logs the SQL, post-execution, including timing execution statistics
jdbc.audit      : Logs ALL JDBC calls except for ResultSets
jdbc.resultset  : all calls to ResultSet objects are logged
jdbc.connection : Logs connection open and close events
--&gt;
&lt;configuration&gt;
    &lt;appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"&gt;
        &lt;!-- By default, encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder --&gt;
        &lt;encoder&gt;
            &lt;pattern&gt;%d{yyyy-MM-dd HH:mm:ss, Asia/Seoul} [%thread] %-3level %logger{5} - %msg %n&lt;/pattern&gt;
        &lt;/encoder&gt;
    &lt;/appender&gt;

    &lt;appender name="dailyRollingFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"&gt;
        &lt;rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"&gt;
            &lt;fileNamePattern&gt;${LOG_FILE}/api.%d{yyyy-MM-dd}-%i.log&lt;/fileNamePattern&gt;
            &lt;maxHistory&gt;10&lt;/maxHistory&gt;
            &lt;cleanHistoryOnStart&gt;true&lt;/cleanHistoryOnStart&gt;
            &lt;timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"&gt;
                &lt;maxFileSize&gt;100MB&lt;/maxFileSize&gt;
            &lt;/timeBasedFileNamingAndTriggeringPolicy&gt;
        &lt;/rollingPolicy&gt;
        &lt;encoder&gt;
            &lt;charset&gt;UTF-8&lt;/charset&gt;
            &lt;pattern&gt;%d{yyyy:MM:dd HH:mm:ss.SSS, Asia/Seoul} %-5level --- [%thread] %logger{35} : %msg %n&lt;/pattern&gt;
        &lt;/encoder&gt;
    &lt;/appender&gt;

    &lt;logger name="jdbc" level="OFF"/&gt;

    &lt;!-- &lt;logger name="jdbc.sqlonly" level="INFO" additivity="false"&gt;
      &lt;appender-ref ref="dailyRollingFileAppender" /&gt;
    &lt;/logger&gt;

    &lt;logger name="jdbc.resultset" level="INFO" additivity="false"&gt;
      &lt;appender-ref ref="dailyRollingFileAppender" /&gt;
    &lt;/logger&gt; --&gt;

    &lt;!-- &lt;logger name="jdbc.resultsettable" level="INFO" additivity="false"&gt;
      &lt;appender-ref ref="dailyRollingFileAppender" /&gt;
    &lt;/logger&gt;   --&gt;

    &lt;logger name="jdbc.sqltiming" level="INFO" additivity="false"&gt;
        &lt;appender-ref ref="STDOUT" /&gt;
        &lt;appender-ref ref="dailyRollingFileAppender" /&gt;
    &lt;/logger&gt;

    &lt;root level="INFO"&gt;
        &lt;springProfile name="local"&gt;
            &lt;appender-ref ref="STDOUT"/&gt;
        &lt;/springProfile&gt;
        &lt;springProfile name="dev"&gt;
            &lt;appender-ref ref="dailyRollingFileAppender"/&gt;
        &lt;/springProfile&gt;
        &lt;springProfile name="prod"&gt;
            &lt;appender-ref ref="dailyRollingFileAppender"/&gt;
        &lt;/springProfile&gt;
        &lt;springProfile name="green"&gt;
            &lt;appender-ref ref="dailyRollingFileAppender"/&gt;
        &lt;/springProfile&gt;
        &lt;springProfile name="blue"&gt;
            &lt;appender-ref ref="dailyRollingFileAppender"/&gt;
        &lt;/springProfile&gt;
        &lt;springProfile name="staging"&gt;
            &lt;appender-ref ref="dailyRollingFileAppender"/&gt;
        &lt;/springProfile&gt;
    &lt;/root&gt;

&lt;/configuration&gt;

 


이것도 읽어보세요