어플리케이션을 운영하던 도중에 장애가 발생, 잘못된 접근, 예상치 못한 작동 등과 같이 문제가 발생 -> 문제의 원인을 파악해야 함 -> 날짜, 시간, 서비스, 로직 등에 대한 정보가 필요 -> 이런 정보를 얻기 위해서 Exception이 발생하거나 중요한 기능들이 실행되는 부분에서는 로그(log)를 남기는 것
slf4j
Simple Logging Facade for java의 약자
java.util.logging, logback, log4j와 같은 다양한 로깅 프레임 워크에 대한 추상화 역할을 하는 라이브러리
로깅을 간단하게 사용할 수 있도록 하는 Facade
로깅 라이브러리들을 하나의 통일된 방식으로 사용할 수 있는 방법
추상 로깅 프레임워크이기에 단독 사용은 하지 않음
compile시 하나의 로깅 프레임워크와 바인딩
*) Spring Boot는 slf4j와 logback을 기본으로 사용
slf4j 사용이유
구현체의 종류에 상관없이 일관된 로깅 코드 제공
Java로깅 프레임워크간의 쉬운 전환
System.out.println()을 사용하지 않고 손 쉽게 디버깅 가능
slf4j 동작과정
개발할 때, slf4j API를 사용하여 로깅 코드를 작성
배포할 때, 바인딩된 Logging Framework가 실제 로깅 코드를 수행
slf4j Bridging
프로젝트에서 일부 구성 요소는 SLF4J가 아닌 다른 로깅(logging) API에 의존하는 경우가 있음
다른 로깅 API로의 Logger 호출을 slf4j 인터페이스로 연결하여 slf4j가 대신 처리할 수 있도록 하는 라이브러리
일종의 어댑터 역할
slf4j API
Logger, LoggerFactory등의 classs 및 interface등을 사용하여 일관된 로깅 코드를 사용할 수 있는 환경을 구성가능
slf4j-api만을 이용해서는 로그 기능을 사용할 수 없고, slf4j의 다른 모듈인 Binding 기능을 이용하여 하나의 Java 로깅 프레임워크를 구현체로써 사용해야 함
로그 레벨에 따른 출력 메서드들을 제공
TRACE: 추적 레벨은 DEBUG보다 좀 더 상세한 정보를 표시
DEBUG: 프로그램을 디버깅하기 위한 정보를 표시
INFO: 상태 변경과 같은 정보성 로그를 표시
WARN: 처리 가능한 문제, 시스템 에러의 원인이 될 수 있는 경고성 메시지를 표시
ERROR: 요청을 처리하는 중 오류가 발생한 경우를 표시
TRACE < DEBUG < INFO < WARN < ERROR 레벨에 따라서 로그 메세지가 달라짐
slf4j Binding(.jar)
slf4j의 인터페이스의 로깅 구현체와 로깅 프레임워크사이의 연결역할을 하는 모듈
logback, log4j2 등등 slf4j와 Java로깅 프레임워크 사이에서 사용할 수 있음