Notice
Recent Posts
Recent Comments
Link
04-28 05:52
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

블링블링

빠르고 유연한 자바 로깅 라이브러리 LOGBACK 소개 본문

JAVA

빠르고 유연한 자바 로깅 라이브러리 LOGBACK 소개

o블링블링o 2017. 3. 9. 17:26

로그의 뜻

  • 사전적 의미, 통나무
  • 컴퓨터 등에 접속한 기록 등이 컴퓨터 내에 남아있는 것
어원은 통나무라는 의미의 로그가 통나무 집이나 목선(나무배) 등으로 의미가 확장되었는데, 승선을 Log in 이나 Log on으로 사용하고 하선을 Log out이나 Log off로 부르게 된것이다. 컴퓨터 시대가 오면서 이 의미는 컴퓨터에도 확장되었고, 컴퓨터에 접속하거나 종료한 것 뿐만 아니라 사용기록 전반을 기록하는 것을 뜻하는 단어로까지 의미가 발전하게 되었다.

나에게 로그, 로그, 로그

  • 기록을 남기는 것
  • 자동으로 남겨주지는 않음
  • 프로그래머가 남길 내용을 직접 지정해야 함
  • 유지보수 효율 향상에 기여
  • 남발할 경우 가독성 및 성능 저하, 역효과

LOGBACK..?

  • Ceki Gulcu (세키굴츄?)라는 개발자가 만들었다.
  • log4j의 후계자
  • 로깅 인터페이스 slf4j 의 native 구현체
  • SpringBoot 에 채택된 공식 로거

로깅 파사드 SLF4J

클래스 라이브러리 같은 어떤 소프트웨어의 다른 커다란 부분에 대한 간략화된 인터페이스를 제공하는 객체


SLF4J와 로그 구현체

SLF4J는 바인딩 라이브러리를 통해 다양한 종류의 로그 구현체를 사용할 수 있다. 이 구조로 로거를 사용한다면 차후 로거를 다른 종류로 교체할때 코드를 변경하지 않고 구현체 라이브러리만 교체하면 된다.



SLF4J와 브릿지 라이브러리

로그백으로 로깅라이브러리를 교체하였을때, 기존 라이브러리 의존성에서 오류가 날 수도 있다. 예를 들어 log4j 라이브러리를 제거하고 logback으로 라이브러리를 교체한 상태라면, 기존에 log4j를 사용하고 있던 라이브러리에서 오류가 발생할 것이다. 이럴경우에는 slf4j에서 제공하는 브릿지 라이브러리를 사용하면 해결 할 수 있다. log4j 라이브러리 의존성이 필요한 경우라면, log4j-over-slf4j.jar 파일을 라이브러리에 추가해 주면 된다. ?-over-slf4j.jar 형식의 라이브러리들은 브릿지 라이브러리이다.


주요한 기능들 6가지

1. AUTOMATIC RELOADING CONFIGURATION FILE

  • LOGBACK을 도입해야 하는 제일 중요한 이유
  • 설정파일의 변경 감지
  • 로깅레벨 변경시 설정파일을 자동으로 읽어들이는 기능
  • 웹어플리케이션서버(WAS)를 재시작 하지 않아도 됨
  • 파일변경 감지 주기를 사용자가 설정할 수 있음

2. GRACEFUL RECOVERY FROM I/O FAILURES

기존 log4j에서 FileAppender를 사용하여 로그를 파일서버에 저장하는 경우, 파일서버에 문제가 있어 I/O fail이 발생하면 웹어플리케이션서버(WAS)를 재시작 했어야 했지만, logback에서는 파일서버가 정상으로 돌아오면 에러 상황에서 빠르게 자동으로 복구가 된다.

3. AUTOMATIC COMPRESS

  • 로그파일 자동 압축 기능
  • 별도의 배치 프로그램을 사용하지 않아도 됨
  • 지정한 시간이 지나면 자동으로 삭제하게 할 수 있음
  • 비동기 방식으로 동작, 어플리케이션의 성능에 영향을 최소화

4. PRUDENT MODE

다수의 JVM 인스턴스에서 같은 로그 파일을 사용하여 로그를 안전하게 기록할 수 있는 기능을 제공.


5. CONDITIONAL PROCESSING CONFIGURATIONS

  • 개발, 운영서버의 로그 설정파일 일원화
  • 설정파일에 if-then-else 조건물을 사용할 수 있음

6. STACK TRACES WITH PACKAGING DATA

logback을 사용해서 stacktrace를 남기게 되면 각 패키지의 Artifact 정보와 버전정보를 출력해준다. 배포에 문제가 있다면 바로 확인이 가능하게 해주는 유용한 기능이다.



프로젝트에 적용해보기

DEPENDENCIES 설정

MAVEN의 경우


GRADLE의 경우


logback.xml 파일 설정


로거 선언 및 사용


결과 : UserName is JEON, Email is gplusit@gmail.com


벤치마크

by Andre Newman (July 7, 2015)

출처 : loggy


JUL(Java Util Logging)을 제외한 다른 로거와 비슷한 양상을 보인다.



동기로깅 부분에서는 큰 성능의 차이가 없지만, 비동기로깅 부분에서는 제일 성능이 좋은 것으로 나타난다. 단, Drop Rate가 76%라는 점을 주목해야 한다. Drop Rate가 76퍼센트라는 것은 로그 10개중 7개 가량이 소실되었다는 것이다. 이것은 기능적인 오류가 아니며, 로그백에서 선택적으로 로그를 기록했기 때문이다. 일정 버퍼 용량 이상의 데이터가 몰리는 경우 중요한 데이터만 기록하고 나머지는 버리는 것이다. 물론 버퍼의 크기는 사용자가 지정할 수 있으며, 100% 무손실로 기록하도록 설정할 수도 있다. 무조건 버리는 것은 아니니 설정을 잘 확인하고 사용하면 된다.


그래서...뭣이 중한디(로그를 로그백으로 변경하기 전에)


이럴땐 바꾸지 마세요

  • 지금 딱히 불편하지 않고, 로그 때문에 문제가 된 적이 있다.
  • 오랜 시간 동안 검증된 모듈이 좋다.
  • 운영서버에서 로그 수준을 변경할 일이 거의 없다.
  • 로그를 정기적으로 압축하거나 삭제하지 않아도 된다. 혹은 배치 Job으로 무리없이 수행하고 있다.

이럴땐 바꾸세요

  • 로그 수준을 변경해야 하는 일이 잦다.
  • 일정 기간 지난 로그는 압축하거나 삭제해야 한다.
  • 원격지의 로그 파일 서버를 사용한다.
  • 여러 시스템에서 하나의 로그파일에 로그를 남겨야 한다.
  • 성능을 위해 비동기 로깅을 사용해야 한다.




공감() 및 댓글은 글쓴이에게 큰 힘이 됩니다.

로그인 없이도 가능하답니다.


오늘도 당신의 삶을 응원합니다.



'JAVA' 카테고리의 다른 글

IE 익스플로러 파일 다운로드 한글 깨짐  (1) 2017.03.08
Comments