-
로그(log) 기록하기, SLF4J란?Spring Boot 2022. 1. 29. 20:25
로그(log) 기록하기, SLF4J란?
SLF4J 란?
Simple Logging Facade for Java (SLF4J)
Facade(퍼사드 패턴 : 간략화된 인터페이스를 제공해주는 디자인 패턴)라는 단어의 뜻 처럼 JAVA에서 심플한 로깅 인터페이스를 제공하는 API 입니다.
※ API: (Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스)
다양한 로깅 프레임워크(logging framework)들에 대한 추상화 역할을 제공하여 최종 사용자가 배포 시 원하는 로깅 프레임워크를 연결할 수 있도록 합니다
위 그림처럼 사용자는 구체적인 구현체에 직접 접근하지 않습니다. SLF4J에 요청하면 바인딩 된 구현체가 로깅 작업을 하게 됩니다.
SLF4J API를 사용하는 로깅 프레임워크로는 java.util.logging, log4j, logback, log4j2 등이 있습니다.
Spring Boot는 SLF4J와 logback을 기본으로 사용하고 있습니다.
SLF4J 모듈 구성
SLF4J는 크게 3가지 모듈로 구성되어 있습니다.
1. SLF4J-API
Logger interface 를 제공하며 로그 레벨에 따른 출력(printing) 메서드들을 제공합니다.
로그 레벨 출력 메서드 설명 TRACE trace() 세분화된 정보 이벤트를 지정 DEBUG debug() 애플리케이션을 디버그하는 데 가장 유용한 세분화된 정보를 지정 INFO info() 대략적인 수준에서 응용 프로그램의 진행 상황을 강조하는 정보 메시지를 지정 WARN warn() 잠재적으로 위험이 될 상황을 지정 ERROR error() 애플리케이션이 계속 실행되도록 허용할 수 있는 오류 이벤트를 지정 FATAL X 응용 프로그램이 중단될 수 있는 매우 심각한 오류 2. SLF4J Binding (jar)
SLF4J-API 모듈은 class-path에 있는 로깅 프레임워크(logging framework) 구현체를 Class-loader 방식으로 바인딩 합니다. 이 때 구현체는 오직 하나만 있어야 합니다. class path에 jar파일이 없을 시 no-operation 으로 설정됩니다. 즉, 아무것도 출력하지 않습니다.
위 사진은 로깅 프레임 워크를 바인딩하는 방법을 그래프로 표현한 사진입니다.
- (아무것도 바인딩 하지 않은 경우)
- logback-classic.jar, logback-core.jar (logback-classic)
- slf4j-reload4j.jar (reload4j)
- slf4j-jdkXX.jar (java.util.logging)
- slf4j-simple.jar (simple)
- slf4j-nop.jar (no-operation)
3. SLF4J Bridge
프로젝트에서 일부 구성 요소는 SLF4J가 아닌 다른 로깅(logging) API에 의존하는 경우가 있습니다. 예를 들면 spring-context는 JCL(Jarkarta Commons Logging) API를 사용합니다. 또한 이러한 구성 요소가 SLF4J로 전환되지 않을 수도 있습니다. 이러한 상황을 처리하기 위해 SLF4J는 log4j, JCL 및 java.util.logging API에 대한 호출을 리디렉션하여 SLF4J API에 대해 만들어진 것처럼 동작하도록 하는 여러 브리징 모듈과 을 제공합니다.
그림은 SLF4J Bridge 모듈의 동작 아이디어 입니다.
SLF4J 동작 방식
Post
- 2022.01.29 - [Spring Boot] - 로그(log) 기록하기, SLF4J란?
- 2022.01.30 - [Spring Boot] - Logback이란? feat.SLF4J
References
- https://www.slf4j.org/
- https://gmlwjd9405.github.io/2019/01/04/logging-with-slf4j.html
- https://livenow14.tistory.com/63?category=1009785
잘못된 코드나 내용이 있다면 댓글을 남겨주세요. 즉시 수정하도록 하겠습니다! :)
'Spring Boot' 카테고리의 다른 글
[스프링 부트] 예외처리(Exception) @ControllerAdvice @RestControllerAdvice @ExceptionHandler @ResponseStatus (0) 2022.02.14 Logback이란? feat.SLF4J (0) 2022.01.30 [스프링 부트] InvalidDataAccessApiUsageException: Unknown entity #그래들 멀티 모듈 (0) 2022.01.28 [Spring boot] MySql 연결 에러, com.mysql.cj.jdbc.driver (0) 2022.01.19 인텔리제이에 spring-boot-devtools 추가하기 (0) 2021.12.11