일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자바
- jupyter
- 16.04.2
- S8
- java
- spark-shell
- Jupyterhub
- Python
- 삼성
- R
- pip
- 갤럭시S8
- 다운로드
- sc.textFile
- ipykernel
- node
- python-dateutil
- 갤럭시노트8
- 갤럭시 S8
- 주피터허브
- ubuntu
- 835
- 루머
- 16.04
- 우분투
- 빅데이터
- 유출
- 주피터
- 노트북
- 스냅드래곤
- Today
- Total
블링블링
빠르고 유연한 자바 로깅 라이브러리 LOGBACK 소개 본문
로그의 뜻
- 사전적 의미, 통나무
- 컴퓨터 등에 접속한 기록 등이 컴퓨터 내에 남아있는 것
나에게 로그, 로그, 로그
- 기록을 남기는 것
- 자동으로 남겨주지는 않음
- 프로그래머가 남길 내용을 직접 지정해야 함
- 유지보수 효율 향상에 기여
- 남발할 경우 가독성 및 성능 저하, 역효과
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
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 |
---|