log는 시스템 동작 중 발생하는 행위들을 기록하는데 사용된다. 보통 로그를 통해 개발 환경에선 동작이나 상태를 확인할 수 있고, 운영상에선 사용자 로그를 보고 분석하거나 에러를 발견하여 대응할 수 있다.
가장 기본적으로 콘솔에 로그를 남기는 방법은 System.out.print()이다. 다만 운영 환경에서 사용하는 것을 지양해야 하는데, Synchronized가 걸려있기에 다른 쓰레드들이 잠시 멈추고, 이는 성능에 영향을 끼친다.
따라서 별도의 logging 라이브러리를 이용하여 로그를 콘솔이나 파일, DB에 저장하는 전략을 사용한다.
logging 관련 프레임워크 중 대표적으로 log4j, logback, log4j2가 있으며 logback을 가장 많이 사용한다. logback은 스프링 부트의 기본 설정으로 되어 있어 별도의 설정이 필요없다.(spring-boot-starter-logging) 보통 위의 프레임워크를 바로 사용하지 않고 Slf4j라는 추상화 인터페이스를 통해 로그를 작성한다.
Slf4j 추상화 인터페이스 라이브러리를 통해 로깅 코드를 작성하면 배포 시 바인딩된 Logging 프레임워크(logback)가 실제 로딩 코드를 수행한다. 이는 Bridge, Slf4j api, Binding 모듈을 통해 수행된다.
Bridge 모듈은 Slf4j 이외의 다른 로깅 API 호출들을 Slf4j api가 대신 처리(redirect)할 수 있도록 변환하는 어댑터 역할을 수행한다. (아직 변경되지 않은 레거시 로깅 프레임워크를 사용하기 위해 존재한다)
Slf4j api 모듈은 로깅에 대한 추상화 인터페이스를 제공하며 해당 인터페이스로 로그를 작성하는 것이다.
Binding 모듈은 Slf4J API와 로깅 구현체를 연결하는 모듈이다. 반드시 하나의 API에 하나의 Binding이 연결되어야 한다. 다양한 로깅 라이브러리(log4j, logback)가 이를 따른다.