Logging
- 어플리케이션 개발 중 또는 완료 후 발생할 수 있는 오류를 디버깅하거나, 상태를 모니터링하기 위해 필요한 정보를 기록하는 것
- 그동안
System.out.println()
을 이용했는데, 이는 좋은 방법이 아니다.
- sout을 이용하면 개발중에 필요한 로그를 구별하기 위해서는 특정 로직에서 컴파일을 하고 다른 부분에서 로그를 찍고싶으면 원하는 sout을 다시 코멘트 해제(재컴파일)하고 계속 반복되기 때문에 소스코드가 재컴파일 하는게 너무 잦아짐.
-> logging 처리에 적합하지 않다.
자바 주요 로깅 프레임워크
- log4j : 아파치가 만들었는데 굉장히 큰 보안상 취약점이 생김 -> 안씀
- logback : log4j의 후속버전. 스프링부트에 내장!되어있음.
- tinylog : 최소형 로그처리. 소형 어플리케이션(작아야하는, 모바일 디바이스) 또는 스마트 카드에서 사용
- SLF4J :
S
impleL
oggingF
acade4
(for)J
ava
- 자바 주요 로깅 프레임워크들의 표준안.
facade 패턴 -> 쓰기 편하게(단순하게) 바꿔주는 것
SLF4J
TRACE < DEBUG < INFO < WARN < ERROR
- TRACE: 아주 상세한 정보를 나타낸다.
- 지저분해질 수 있어서 잘 안씀
- DEBUG : 디버깅하기 위해 표시한다.
- INFO : 가장 많이 쓰이는 레벨. 상태의 변경정보를 표시한다.
- WARN : 경고성 메시지를 표시한다.
- ERROR : 오류가 발생한 경우 표시한다.
SLF4J와 log4j, logback의 관계, Binding Library
1. SLF4J - LOG4J
- 만약 SLF4J API를 사용하고, 실제로 사용되는 로깅프레임워크는 log4j를 사용한다고 가정하면
이때, 사용법을 log4j에 맞추는 것이 아니라, slf4j에 맞춰 사용하더라도 중간 매개체 역할을 해주는 라이브러리가 알아서 자동으로 log4j의 기능을 호출한다.2. SLF4J - LOGBACK
- 우리가 사용하는 것은 표준안인
slf4j
이지만 실제로 사용되는 라이브러리는 스프링 부트에 내장돼있는 logback이다.3. Binding Library
이때, 실제 사용되고 있는 프레임워크(slf4j)와 logback을 연결해주는 라이브러리가 더 필요하다 -> binding용 라이브러리. -> binding용 라이브러리의 이름이
logback-classic-{버전}.jar
4. Bridge Library
- 브릿지용 라이브러리도 필요한데 이는 log4j에서 사용했던 문법을 logback에 갖다 쓰고 싶지만 다른프레임워크이기 때문에 갖다 쓸 수없음 -> 중간 브릿지역할을 해주는 라이브러리가 해줄 수 있는데,
- slf4j에서 사용하는 바인딩용 라이브러리(스프링부트에 내장), 이기종간의 브릿지역할을 해주는 브릿지용 라이브러리 2개가 필요함(jul-to-slf4j 인것같음)
log 코드 설정방법
private static Logger logger = LoggerFactory.getLogger(DemoApplication.class); // 로그 대상이 될 클래스 지정
logging.level.root = debug