slf4j
Simple Logging Facade for Java
Logback, Log4j2와 같은 Logging Framework의 추상화 역할을 합니다.
추상화 로깅 라이브러리이기 때문에 단독으로는 사용할 수 없고 배포 시에 개발자가 로깅 프레임워크를 선택해서 연결해줘야 사용할 수 있습니다.
대부분의 자바 로깅 모듈은 slf4j의 브릿지를 이미 제공해주고 있어서 slf4j와 다른 프레임워크를 연결하기 위해 추가로 구현 작업이 필요없습니다. 이미 만들어진 API를 찾아 그냥 넣어 주기만 하면 됩니다.
logback을 쓰고 싶으면 slf4j-api를, log4j2를 쓰고 싶다면 log4j-slf4j-impl과 log4j-api를 추가하면 됩니다.
즉 slf4j를 사용함으로써 하나의 라이브러리에 종속적일 필요가 없게 됩니다.
SLF4J의 동작 과정
- 개발할 때, SLF4J API를 사용하여 로깅 코드를 작성
- 배포할 때, 바인딩된 Logging Framework가 실제 로깅 코드를 수행
- SLF4J Bridging Modules
- 다른 로깅 API로의 Logger 호출을 SLF4J 인터페이스로 리다이렉트하여 SLF4J API가 대신 처리할 수 있도록 일종의 어댑터 역할을 하는 라이브러리
- Bridge는 여러 개를 사용해도 상관없지만, 사용 시 주의점은 Bridge와 Binder에 같은 종류의 프레임워크를 사용하면 안 됩니다.
- log4j-over-slf4j, jcl-over-slf4j, jul-to-slf4j
- SLF4J API(인터페이스)
- 로깅에 대한 추상 레이어를 제공합니다. 즉 추상 메서드를 제공해요.
- 하지만 위에서 봤듯이 이 dependency만 추가하면 binding 이 없다는 에러를 만나게 돼요. 추상 클래스이기 때문에 단독적으로 사용할 수가 없는 것이죠.
- 반드시 하나에 API에 하나의 Binding을 둬야 합니다.
- slf4j-api
- SLF4J Binding
- SLF4J 인터페이스를 Logging Framework(로깅 구현체)와 연결하는 어댑터 역할을 하는 라이브러리
- SLF4J API를 구현한 클래스에서 Binding으로 연결될 Logger의 API를 호출해요.
- 하나에 API에는 하나의 Binding만을 두어야 해요.
- logback: logback-classic
- Logging Framework
- logback: logback-core
slf4j는 컴파일 시 Logging Framework를 선택할 수 있다는 장점이 있습니다.
만일 이를 변경하고자 한다면, 위에서 Logging Framework 와 Binding을 바꾸면 됩니다.
logback
Logback은 Log4j의 improved 버전입니다.
Logback을 Spring에서 사용하기 위해서는 resources 디렉토리 안에 logback-spring.xml 파일을 만들어서 설정을 해주면 됩니다.
Spring Boot에는 기본적으로 logback이 포함되어 있어서 resources/logback-spring.xml 에서 설정을 하거나 혹은 application.properties를 통해 logback을 제어할 수 있습니다.
Log4j
Log4j란 Java 기반 로깅 유틸리티로 여러 자바 로깅 프레임워크들 가운데 하나입니다.
Apache Log4J(Log4Shell) 취약점으로 이슈가 되었었고, 전 회사에서도 자바 버전을 올리고 Log4j도 업데이트했던 것으로 기억합니다.
참고 :
'개발 > 개발지식' 카테고리의 다른 글
사용자 인증(Authentication)과 권한 처리(Authorization) (0) | 2023.04.03 |
---|---|
메모리의 구조 (0) | 2023.03.29 |
[생성 패턴] 싱글톤 패턴(Singleton pattern) (0) | 2023.02.22 |
REST API (0) | 2023.02.21 |
디자인패턴 (0) | 2023.02.21 |