log4j 에서 logback으로 바꾸려고 결정하다.
불과 저번주까지 log4j만 쓰다가 slf4j를 통해 logback 을 사용해보기로 결정했습니다.
사실 logback이라는게 있다는걸 오늘 알았습니다. ㅡㅡ;
다들 아는 사실이겠지만 log4j를 만든사람이 새롭게 만든 log관련 라이브러리라서 (이유)
log4j를 사용해본 분들이라면 손쉽게 적응할수 있다고 합니다.
간단하게 본인위주로 정리하겠습니다.
자세한 설명은 맨아래 참조란을 따라가시면 됩니다.
1. 새롭게 제공되는 주요 기능 및 개선
. log4j에 비해 속도나 메모리 사용면에서 개선
. 설정파일의 Dynamic Reloading 지원
. 설정파일의 조건부 처리 기능
. 로그파일에 대한 자동압축, 자동 삭제 기능 제공
. 런타임에 설정한 값에 따라 로그를 분리하여 처리할 수 있는 SiftingAppender 제공
. groovy 언어로 설정파일 작성 기능
. FileAppender 사용 시 다수의 JVM이 동시에 하나의 파일에 로그를 남길 수 있는 prudent mode를 지원
. 다양한 조건에 따른 로깅처리 여부를 결정할 수 있는 Filter 제공
이것중에 관심이 가는 것은 설정파일의 Dynamic Reloading 지원 , 로그파일에 대한 자동 압축, 자동 삭제기능 제공 입니다.
2. Dynamic Reloading 지원
예전같으면 INFO 모드로 로그를 쌓고 있다가 여러가지이유로 DEBUG모드로 로그를 쌓고 싶을때
설정화일을 변경하고 서버를 재기동해야 했습니다.
하지만 LOGBACK에서는 설정을 바꾸면 주기적으로 변경사항이 있는지 체크하여 자동으로 설정파일의
내용을 reloading 하여 변경합니다.
방법은
<configuration scan="true" scanPeriod="30 seconds"> ..... </configuration>
이렇게하시면 됩니다.
그럼 30초단위로 설정화일을 스캔합니다.
3. 로그파일에 대한 자동압축, 자동 삭제기능 제공
저역시 하루에 몇기가씩 로그가 쌓이는(INFO인데도...) 서버를 운영중입니다.
그래서 그전에 했던 방법은 주기적으로 하루전의 로그파일을 압축해서 보관하는 스크립트를 작성하여
crontab으로 스케줄링하여 사용하고 있었습니다.
하지만 logback에서는 스스로 이러한 처리를 할수있는 옵션을 제공합니다.
<configuration scan="true" scanPeriod="30 seconds"> ..... </configuration> <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern> someFileName.log.zip (or gz) </fileNamePattern> <maxHistory>90</maxHistory> </rollingPolicy> .... </appender>
fileNamePattern : 마지막 확장자를 zip 이나 gz 로 지정하면 자동으로 압축합니다.
maxHistory : (조금 혼란스러웠지만 이제는 이해가 되는 내용이였습니다). 남겨놓을 로그파일의 갯수입니다.
즉 size 단위로 한다고 하면 90개가 넘어가게 되면 옛날것부터 삭제합니다.
그리고 백업을 SIZE 단위가 아니고 매일단위로 백업을 한다면 위에같은 경우에는
90일동안 보관하다가 삭제를 하게됩니다.
(정확히 말하자면 90개가 넘어가게되면 옛날것부터 삭제).
그리고 만일 매월단위로 백업을 한다면 90개월후에 삭제되겠지요.
이해가 되시나요? 그럼 만일 중간의 파일을 임의로 삭제하게된다면?
저도 테스트해보고 블로그에 남기도록 하겠습니다.
참조
http://dev.anyframejava.org/docs/anyframe/plugin/optional/logback/1.0.2/reference/html/index.html