8. 8
2. Slf4j는 알지?
Façade 디자인 패턴은 복잡한 서브시스템의 인터페이스를 간단하고
통일된 인터페이스로 단순화시켜준다.
장점
• 서브시스템의 컴포넌트로 부터 클라이언트를 격리하여 클라이언
트가 쉽게 서브시스템을 이용할 수 있다.
• 서브시스템과 클라이언트 사이의 의존성을 낮춘다.
• Façade 패턴을 사용한다고 해도 필요한 경우에 따라 서브시스템에
직접 접근할 수도 있다.
http://sourcemaking.com/design_patterns/facade
12. 12
3. Logback 은 알아?
널리 알려진 Log4j의 개발자인 Ceki Gulcu 라는 개발자가
기존 Log4j를 대체하기 위하여 SLF4J와 LogBack을 함께
개발하였음.
13. 13
3. Logback 은 알아?
Log4j 보다 LogBack을 사용해야되는 이유
http://logback.qos.ch/reasonsToSwitch.html
. log4j에 비해 속도나 메모리 사용면에서 개선
. SLF4J의 인터페이스를 직접 구현
. 설정파일의 Dynamic Reloading 지원
. 설정파일의 조건부 처리 기능
. 로그파일에 대한 자동압축, 자동 삭제 기능 제공
. 런타임에 설정한 값에 따라 로그를 분리하여 처리할 수 있는
SiftingAppender 제공
. groovy 언어로 설정파일 작성 기능
. FileAppender 사용 시 다수의 JVM이 동시에 하나의 파일에 로그를 남길 수
있는 prudent mode를 지원
. 다양한 조건에 따른 로깅처리 여부를 결정할 수 있는 Filter 제공
출처: <http://blog.cjred.net/240>
14. 14
3. Logback 은 알아?
Dependencies
slf4j-api.jar : slf4j 표준 인터페이스 구현체.
logback-core.jar : logback-classic과 의존 모듈로 appender, layout 등이 구현되어 있는 모듈
logback-classic.jar : LogBack의 logger와 SiftAppender 등이 구현되어 있는 모듈
MAVEN
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.2</version>
</dependency>
15. 15
3. Logback 은 알아?
LogBack의 주요 구성요소
Logger : 실제 로깅을 수행하는 구성요소로 Level 속성을 통해서 출력할 로그
의 레벨을 조절
Appender : 로그 메시지가 출력될 대상을 결정하는 요소
Encoder : Appender에 포함되어 사용자가 지정한 형식으로 표현 될 로그메
시지를 변환하는 역할을 담당하는 요소
설정화일
XML을 이요한 설정방법 : logback.xml로 설정 파일을 작성 후 해당 파일을
클래스패스에 위치시킨다.
Groovy 언어를 이요한 설정방법 : Logback.groovy 로 설정 파일 작성 후 해
당 파일을 클래스패스에 위치시킨다.
log4j.properties 를 logback.xml 로 자동으로 변환해주는 웹변환기
http://logback.qos.ch/translator/
17. 17
4. Logback 에는 이런 기능도 있어!
1. Dynamic Reloading 지원
설정을 바꾸면 주기적으로 변경사항이 있는지 체크하여 자동으로 설정파일의
내용을 reloading 하여 변경.
방법은
<configuration scan="true" scanPeriod="30 seconds">
.....
</configuration>
30초단위로 설정화일을 스캔.
출처: <http://blog.cjred.net/240>
http://logback.qos.ch/reasonsToSwitch.html
18. 18
4. Logback 에는 이런 기능도 있어!
2. 로그파일에 대한 자동압축, 자동 삭제기능 제공
<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 : 남겨놓을 로그파일의 갯수
출처: <http://blog.cjred.net/240>
http://logback.qos.ch/reasonsToSwitch.html
20. 20
5. Log4j 2 도 있다네~
API의 분리 - API Separation
향상된 수행력 - Improved Performance
다양한 API들을 위한 지원 - Support for multiple APIs
환경설정의 자동적 재호출 - Automatic Reloading of Configurations
향상된 필터링 - Advanced Filtering
플러그인 구조 - Plugin Architecture
속성 지원 - Property Support
Java 6 이상버전을 요구
http://logging.apache.org/log4j/2.x/index.html
http://happy2v.egloos.com/viewer/887190
21. 21
5. Log4j 2 도 있다네~
Log4j개발자들이 말하는 Log4j2를 쓰길 바라는 이유
http://logging.apache.org/log4j/2.x/manual/index.html
성능문제(비동기식 logger들을 사용하는 경우에만 성능향상)
http://logging.apache.org/log4j/2.x/performance.html
http://logging.apache.org/log4j/2.x/manual/async.html#Performance
22. 22
5. Log4j 2 도 있다네~
발표자의 개인적인 생각!
- Logback을 먼저 사용해보세요.
이유
- Log4j 2 는 아직 개발단계
- Logback는 Log4j와 Slf4j를 만든사람
- 발표자가 Logback 을 사용
SLF4J의 API를 사용한면 서브로깅라이브러리에 상관없이 일관된 로깅 코드를 작성할 수 있다.
만일 Apache Commons Logging을 사용하다가 Log4J로 변경할 경우 최소한의 수정으로 서브로깅라이브러리를 변경할 수 있다.
Spring은 JCL 을 사용
예전같으면 INFO 모드로 로그를 쌓고 있다가 여러가지 이유로 DEBUG모드로 로그를 쌓고 싶을때
설정화일을 변경하고 서버를 재기동해야 했습니다.
하지만 LOGBACK에서는 설정을 바꾸면 주기적으로 변경사항이 있는지 체크하여 자동으로 설정파일의
내용을 reloading 하여 변경합니다.
저역시 하루에 몇기가씩 로그가 쌓이는(INFO인데도...) 서버를 운영중입니다.
그래서 그전에 했던 방법은 주기적으로 하루전의 로그파일을 압축해서 보관하는 스크립트를 작성하여
crontab으로 스케줄링하여 사용하고 있었습니다.
하지만 logback에서는 스스로 이러한 처리를 할수있는 옵션을 제공합니다.
즉 size 단위로 한다고 하면 90개가 넘어가게 되면 옛날 것부터 삭제합니다.
그리고 백업을 SIZE 단위가 아니고 매일 단위로 백업을 한다면 위와 같은 경우에는
90일동안 보관하다가 삭제를 하게 됩니다.
(정확히 말하자면 90개가 넘어가게 되면 옛날 것부터 삭제).
그리고 만일 매월 단위로 백업을 한다면 90개월후에 삭제되겠지요.