<configuration scan="true" scanPeriod="30 seconds">
-- 설정 변경시 설정 자동 reload
로그 메세지가 출력할 대상 결정
Encoder
<appender name="meter_log" class="ch.qos.logback.core.FileAppender">
<File>${LOG_PATH}/meter.log</File>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/meter_log.%d.gz</fileNamePattern>
<maxHistory>150</maxHistory>
</rollingPolicy>
</appender>
pattern 에서 지정한 방식대로 시간과 레벨 등의 설정이 되고난 후 콘솔에 메세지를 출력한다.
패턴에 사용되는 요소
기타
상세설명
<appender name="INFO_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>./logs/info.log</file> 파일을 저장할 경로를 정한다
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch> 해당 레벨만 기록한다.
<onMismatch>DENY</onMismatch> 다른 수준의 레벨은 기록하지 않는다.(상위 레벨도 기록 안함), 상위 수준의 레벨에 대한 기록을 원하면 ACCEPT 로 하면 기록된다.
</filter> 레벨별 필터링이 필요없을 경우 filter class 관련된 부분을 삭제하면 됨
<encoder>
<pattern>[%d{yyyy-MM-dd HH:mm:ss}:%-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>180</maxHistory> 한 파일의 최대 저장 기한
</rollingPolicy>
</appender>
[2021-08-07 20:03:12:3093][main] INFO org.hibernate.SQL - drop table if exists user CASCADE
<if condition='p("spring.profiles.active").equals("test") || p("spring.profiles.active").equals("local") || p("spring.profiles.active").equals("dev")'>
<then>
<root>
<appender-ref ref="console"/>
</root>
</then>
<else>
<root>
<appender-ref ref="app_log"/>
<appender-ref ref="app_error_log"/>
<appender-ref ref="lnc-error-log"/>
</root>
</else>
</if>
RollingFileAppender는 FileAppender를 상속하여 로그 파일을 rollover 한다.
RollingFileAppender와 함께 동작하는 두 가지 component가 존재
Property Name | Type | Description |
---|---|---|
append | boolean | 기본값은 true, true일 경우 기존파일에 이어서 쓰기, false일경우 새로운 파일을 생성하여 쓰기. |
encoder | Encoder | 이벤트가 어떤식으로 작성되는지 설정. pattern속성을 통해 패턴 지정이 가능. |
file | String | See FileAppender properties. 타깃 파일이름 |
rollingPolicy | RollingPolicy | 만들어질 파일 이름설정, minIndex, maxIndex설정 가능, 크기별, 시간별, 크기/시간별 로그파일을 만들 수 있다. |
triggeringPolicy | TriggeringPolicy | 새로운 파일을 만들 트리거를 지정, maxFileSize 내부속성을 사용해서 크기가 다 차면 새로운 파일을 생성하도록 설정가능하다. |
prudent | boolean | 여러개의 JVM이 하나의 로그파일에 동시작성을 막기위한 lock설정, 성능저하 있을 수 있음. 일반적으로 2개잇아의 JVM이 하나의 로그파일을 같이사용하지 않는다. |
Propoerty | Type | Description |
---|---|---|
fileNamePattern | String (default %d: yyyy-MM-dd) | 아카이브 될 로그 파일의 패턴을 정의 %d 문자를 이용해 파일의 적절한 부분을 dateTime 패턴으로 치환 FileAppender의 file 프로퍼티를 통해 활성 로그 파일의 위치와 보관 될 로그 파일의 위치를 분리할 수 있다. file 프로퍼티로 등록된 곳이 활성 로그 파일의 위치가 됨 %d{} 내부의 dateTime 패턴 안에 '/' 또는 '\' 기호는 디렉터리 분리자로 인식함 이를 통해 시간으로 원하는 디렉터리 구조를 구성할 수 있다. ex) /var/log/%d{yyyy/MM}/myapplication.%d{yyyy-MM-dd}.log |
maxHistory | int | 아카이브에 저장 유지할 로그 파일의 개수을 지정. 예를들어 rollover를 1개월 마다 하며 값을 6으로 지정했다면, 6개월의 히스토리가 남게된다.. 다음 월의 파일이 아카이브 될 경우 오래된 파일이 삭제된다. |
totalSizeCap | int | 로그 파일 아카이브 저장소의 최대크기를 지정. totalSizeCap을 초과한다면 가장 오래된 파일이 삭제. |
cleanHistoryOnStart | boolean | (default: false) Application이 시작될 때 아카이브된 로그 파일을 모두 삭제함. false로 지정되면 삭제하지 않고 시작된다. |
/foo.%d - default %d는 yyyy-MM-dd임. 매일 자정에 새로운 로그 파일로 rollover
/foo/%d{yyyy/MM}/bar.txt - 매월 새로운 디렉터리를 만들며 하위에 bar.txt 파일로 rollover
/foo/bar.%d{yyyy-MM-dd_HH-mm} - 매 분 새로운 로그 파일로 rollover
/foo/bar.%d.gz - 매일 새로운 로그 파일로 rollover 하고, 이전 로그파일은 GZIP으로 압축
<appender name="meter_log" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_PATH}/meter.log</File>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/meter_log.%d.gz</fileNamePattern>
<maxHistory>150</maxHistory>
</rollingPolicy>
</appender>
TimeBasedRollingPolicy를 적용하였으며 file 태그와 fileNamePattern 태그를 함께 사용하고 있다.
SizeAndTimeBasedRollingPolicy
<configuration>
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>mylog.txt</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
<!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB -->
<maxFileSize>100MB</maxFileSize>
<maxHistory>60</maxHistory>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="ROLLING" />
</root>
</configuration>
Property | Type | Description |
---|---|---|
minIndex | int | window index의 최소값 |
maxIndex | int | window index의 최대값 |
fileNamePattern | String | FixedWindowRollingPolicy를 통해 지어지게된 로그 파일 이름입니다. 반드시 window index를 위해 %i 토큰을 반드시 포함하고 있어야 한다. 예를들어 minIndex=1, maxIndex=3일 경우, MyLogFile%i.log의 파일은 MyLogFile1.log MyLogFile2.log, MyLogFile3.log로 지어지게됨 아카이브할 로그 파일을 압축 하고싶다면 .zip이나 .gz을 끝에 붙여 처리할 수 있다. |
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>test.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>tests.%i.log.zip</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>5MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE" />
</root>