개발시 운영 중 발생하는 문제점을 모니터링 하거나 추적하는데 용이하고 데이터를 분석하여 통계를 낼 수 있게 하기 위해 로깅이라는 기술을 도입할 것이다.
우리가 흔히 썼던 방식이였던 logging 방법은
lombok라이브러리의 SLF4J(심플 로딩 파사드 for Java) 를 사용하였다
SLF4J 이름 그대로 로깅 시스템에 대한 추상화를 제공한다
SLF4J는 추상 로깅 프레임워크이기 때문에 단독으로는 사용하지 못함. 즉, 최종 사용자가 배포시 원하는 로깅 프레임워크를 결정하고 사용해도 SLF4J가 인터페이스화 되어있기에, SLF4J를 의존하는 클라이언트 코드에서는 실제 구현을 몰라도 된다 (의존관계 역전 법칙).
그러면 구현체가 있어야한다
구현체로는 Logback, Log4j, java.util.logging 이 있다
우리는 이 세개의 구현체중에 Logback이라는 것을 사용할 것이다
Logback
성능 : 매우 뛰어난 성능을 가지고 있다. 특히 비동기 로깅 기능을 통하여 빠른 로깅을 지원한다.
구성의 유연성 : XML 기반의 구성파일을 통하여 설정을 유연하게 변경이 가능하다.
로깅레벨 : Logback은 다양한 로깅 레벨을 지원하여 당양한 수준의 로그를 다룰 수 있다.
log4j와의 성능을 비교하면 logback이 월등하다는 평가가 많다고 한다.
빠른 implementation
적은 메모리 점유
maxHistory 설정 값을 이용해 일정 기간이 지나면 로그파일 자동 삭제
등등의 다양한 이점으로 인하여 Logback으로 설정을 할 것이다.
로그 레벨은 기본적으로 [trace > debug > info > warn > error] 순이고 디폴트 설정은 info 로 되어 있다.
만약 설정을 info로 한다면 -> info의 하위 단계인 trace와 debug는 기록 되지 않는다
Log level 이란
로그 메시지의 중요도를 나타내는 수준을 의미
1) TRACE
가장 상세한 로그 레벨로, 애플리케이션의 실행 흐름과 디버깅 정보를 상세히 기록한다. 주로 디버깅 시에 사용된다.
Spring Logback 설정하기에 앞서서..
우리가 흔히 썼던 방식이였던 logging 방법은 lombok라이브러리의 SLF4J(심플 로딩 파사드 for Java) 를 사용하였다
SLF4J 이름 그대로 로깅 시스템에 대한 추상화를 제공한다
SLF4J는 추상 로깅 프레임워크이기 때문에 단독으로는 사용하지 못함. 즉, 최종 사용자가 배포시 원하는 로깅 프레임워크를 결정하고 사용해도 SLF4J가 인터페이스화 되어있기에, SLF4J를 의존하는 클라이언트 코드에서는 실제 구현을 몰라도 된다 (의존관계 역전 법칙).
그러면 구현체가 있어야한다
구현체로는 Logback, Log4j, java.util.logging 이 있다
우리는 이 세개의 구현체중에 Logback이라는 것을 사용할 것이다
Logback
등등의 다양한 이점으로 인하여 Logback으로 설정을 할 것이다.
로그 레벨은 기본적으로 [trace > debug > info > warn > error] 순이고 디폴트 설정은 info 로 되어 있다.
만약 설정을 info로 한다면 -> info의 하위 단계인 trace와 debug는 기록 되지 않는다
Log level 이란
1) TRACE
2) DEBUG
3) INFO
4) WARN
5) ERROR
xml 파일로 기본적인 로깅 하는 방법
우선 xml 설정에서 주요 컴포넌트로는 appender와 logger 두가지로 나뉘어 진다
root 는 자바에서 if문의 else와 같은 역할을 한다고 생각하면 된다
Log pattern
종류
순서대로 시간, 스레드 이름, 로그레벨, 로그의 이름, 실제 로그메시지, 새로운 줄을 표시 등을 나타낸다
로그 파일 저장
개발 환경별 로그 출력
XML 설정
Properties 설정
Log Levels
logging.level.store.mybooks.resource = debug
Logging pattern
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %clr(%-5level) %cyan(%logger) - %msg%n
Logging file
logging.file.name=${LOGS_ABSOLUTE_PATH}/resource.log
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %clr(%-5level) %cyan(%logger) - %msg%n
logging.logback.rollingpolicy.max-file-size=100MB
logging.logback.rollingpolicy.max-history=180