로그를 기록하는 행위를 로깅이라고 하며, 로그파일은 운영 체제나 다른 소프트웨어가 실행 중에 발생하는 이벤트나 각기 다른 사용자의 통신 소프트웨어 간의 메세지를 기록한 파일이다.
spring은 log4j와 logback을 통해 로깅기능을 제공한다.

SFJ는 단순한 퍼사드 패턴을 수단으로 하는 자바 로깅 API를 제공한다. 기반이 되는 로깅 백엔드는 원하는 바인딩을 클래스패스에 추가함으로써 런타임 시점에 결정된다.
한마디로 SLF4J는 추상객체로 log4j나 logback과 같은 라이브러리와 결합하여 SLF4J방식으로 로그를 남길 수 있다.
SLF4J의 강점으로는 의존성만 바꿔주면 log4j또는 logback으로 구축된 프로젝트 로깅을 서로 변경할 수 있다는 점이다.
log4j, logback, log4j2 등 SLF4J와 연동이 가능하기 때문에 앞으로도 SLF4J와 결합 가능한 형태로 로깅 라이브러리가 나올것이다. 그러기에 언제든 변경 가능한 구조로 만들어 놓는 것이 현명할 것이다.

SLF4J에서 제공하는 3가지 모듈을 통해 수행한다.

다른 로깅 API로의 Logger 호출을 SLF4J 인터페이스로 리다이렉트하여 SLF4J API가 대신 처리할 수 있도록 일종의 어댑터 역할을 하는 라이브러리이다.

로깅에 대한 추상 레이어를 제공한다. 추상 메소드를 제공하기 때문에 각 API별 Binding을 통해 사용해야 한다.

SLF4J 인터페이스를 Logging Framework와 연결하는 어댑터 역할을 하는 라이브러리로 SLF4J API를 구현한 클래스에서 Binding으로 연결될 Logger의 API를 호츨한다.
log4j는 여러 자바 로깅 프레이워크들 가운데 하나이다. 최종 사용자가 제품의 문제나 정보를 식별하기 위헤, 개발하는 도중에 디버깅 등을 위해 타임스탬프 등 정해진 양식에 맟추어 화면상이나 파일로 로그를 남길 목적으로 사용된다.
log4j는 세가지로 구성되어 있다.
log4j보다 안정성이 높고 편리하게 log를 관리하기 위해 Logging framework인 Slf4j(Simple Logging Façade for Java)와 그 구현체로써 Logback이 고안되었다.
log4j를 토대로 새롭게 만든 Logging 라이브러리이며, slf4j를 통해 연관 라이브러리들이 다른 logging framework를 쓰더라도 logback으로 통합할 수 있다.
Logback에서 사용할 수 있는 많은 개선 사항을 제공하는 Log4j에 대한 업그레이드 버전이다.
log4j > logback > log4j2 순으로 만들어졌으며 log4j2는 다중 스레드 시나리오에서 비동기식 로거는 Log4j 1.x 및 Logback보다 처리량이 18배 더 높고 대기 시간이 훨씬 더 짧다고 한다.