LOG4J의 차세대 버전인(사실 공개된지 오래됨) LOGBACK을 GITHUB를 통해 다운받았습니다.


이유는 logback의 주요기능중에  설정파일의 Dynamic Reloading 지원 이라는 것이 있는데

매번 전체 설정정보를 reload 하는지 아니면 변경여부(사이즈 등)을 확인후 변경된 것 같으면

reload를 하는지 궁금해서였습니다.


git clone https://github.com/qos-ch/logback.git


소스를 다운받았으니 빌드(이클립스)를 해보고 싶었습니다.

http://logback.qos.ch/setup.html#ide


IntelliJ 에서는 손쉽게 프로젝트를 import해서 사용해볼수 있는데

이클립스에서는 조금 어렵더군요...


사이트에 있는 데로 번역을 해봤습니다.

1. 이클립스를 설치합니다.

2. Groovy 플러그인을 설치합니다.

    . 자신의 이클립스버전에 맞는 플러그인을 사용해야합니다.확인

    예를 들어 이클립스 4.2(Juno)라면 update site 는 http://dist.springsource.org/release/GRECLIPSE/e4.2/ 입니다.

    . 이클립스에서 "help->install new Software->Work with" 에서 상기 update site 를 입력합니다.

    . Groovy-Eclipse Feature" 를 선택합니다. "m2e Configurator for Groovy-Eclipse"는 필요하지 않습니다.

3. $LOGBACK_HOSE(LOGBACK의 소스를 GITHUB로 다운받은 디렉토리)로 이동합니다.

4. 만약에 .settings, .classpath, .project 파일이 폴더에 있다면 삭제합니다(하위폴더 포함)

5. 명령창에서 mvn eclipse:eclipse 라고 명령을 입력합니다. 여기서 문제가 있었는데 별도로 정리하겠습니다.

6. 이클립스에서 LOGBACK 프로젝트를 import합니다. Import->General->Existing projects 에서 $LOGBACK_HOSE 를 선택합니다.

7. 이클립스에서 logback-classic/target/generated-sources/groovy-stubs/main 디렉토리를 소스폴더에서 제거합니다.

    (logback-classic->project properties->Java Build Path)

8. 이클립스에서 모든 프로젝트를 Clean 합니다.(Project->Clean)

9. 이클립스에서 logback-classic 프로젝트를 선택하고 Groovy project 로 변환합니다.

   (logback-classic 프로젝트에서 Configure->Convert Groovy to Project)



Posted by 빨강토끼

불과 저번주까지 log4j만 쓰다가 slf4j를 통해 logback 을 사용해보기로 결정했습니다.

사실 logback이라는게 있다는걸 오늘 알았습니다. ㅡㅡ;

다들 아는 사실이겠지만 log4j를 만든사람이 새롭게 만든 log관련 라이브러리라서 (이유)

log4j를 사용해본 분들이라면 손쉽게 적응할수 있다고 합니다.



http://logback.qos.ch/



간단하게 본인위주로 정리하겠습니다.

자세한 설명은 맨아래 참조란을 따라가시면 됩니다.



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

logback 사용해야 하는 이유 (Reasons to prefer logback over log4j)

Posted by 빨강토끼
TAG logback