SLF4J 와 Log4j 2 연동하기
(이미지 출처 : http://www.slf4j.org/, https://logging.apache.org)
SLF4J와 Log4j2를 연동하기 위한 Gradle dependencies설정에 대해서 알아봅니다.
Log4j2 xml 설정은 Log4j 2 설정하기 글을 참고하시기 바랍니다.
Spring SLF4J Log4J2 샘플을 Github에 올려뒀습니다.
다만, 샘플은 이 글의 목적인 SLF4J-Log4J2 연동의 내용 외의 SpringBoot의 기본적인 설정이 포함되어있습니다.
참고하시기 바랍니다.
SLF4J (Simple Logging Facade for Java)
java.util.logging, Logback, Log4j와 같이 다양한 logging framework들이 있습니다.
그 각각의 framework들은 사용법이 제각각 입니다. 그 framework를 변경하면 Java 코드도 변경이 필요합니다.
SLF4J의 역할은 다양한 logging framework들의 facade(혹은 추상체) 역할을 합니다.
사용중인 logging framework를 변경해도 Java 코드에 대한 변경이 필요없어집니다.
만약 SLF4J를 사용하지 않는다면 모든 Java 코드의 logging 관련 내용을 수정해야하는 대형 작업이 필요하겠죠.
Gradle Configuration
5개의 dependency를 추가해주시면 됩니다.
만약에 Spring framework을 사용하신다면 Spring에 기본 내장된 라이브러리와 충돌이 납니다.
해당 라이브러리에 대한 exclude 작업이 필요합니다.
...(생략)
configurations {
all {
exclude group: "org.springframework.boot", module : "spring-boot-starter-logging"
}
}
dependencies {
// SpringBoot Web
compile 'org.springframework.boot:spring-boot-starter-web'
// SLF4J-Log4j2
compile("commons-logging:commons-logging:${commonsLogging}")
compile("org.slf4j:slf4j-api:${slf4jVersion}")
compile("org.apache.logging.log4j:log4j-api:${log4j2Version}")
compile("org.apache.logging.log4j:log4j-core:${log4j2Version}")
compile("org.apache.logging.log4j:log4j-slf4j-impl:${log4j2Version}")
...(생략)
}
Spring Boot Starter 활용
Spring Boot 를 사용 중이시라면 spring-boot-starter-log4j2
dependency를 이용해서 1개의 의존성 추가로도 해결됩니다.
configurations {
all {
exclude group: "org.springframework.boot", module : "spring-boot-starter-logging"
}
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-log4j2'
}
Log4j2 XML 설정
Log4j 2 설정하기 글을 참고하시기 바랍니다.
Java Code Sample
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Practice {
Logger logger = LoggerFactory.getLogger(getClass());
public void hello(String name) {
logger.info("Hello {}", name);
}
}
hello method를 호출해보시면 log4j2.xml
설정에 따라 logging 되는 것을 볼 수 있으실 겁니다.
근데 위 Java 코드에는 SLF4J만 import 되어있고 Log4j2 관련 내용은 전혀 없습니다.
나중에 다른 logging framework으로 교체를 해야하더라도 Java 코드들을 수정할 필요가 전혀 없습니다.
gradle.build
에서 dependencies만 잡아주시면 됩니다.
SLF4J 의 제대로 된 사용법은 아래 링크를 참고하시기 바랍니다.
부수적인 이야기
우리는 다양한 프로그램들을 접목해서 하나의 시스템을 구성합니다.
쉽게 얘기해서 다양한 라이브러리, 프레임워크를 사용합니다.
만약에 필수적으로 사용해야하는 특정 라이브러리에서 버그가 있는 것 같다면 어떻게 해야할까요?
그 라이브러리의 디버그 로그를 보고 싶다면 어떻게 해야할까요?
만약에 사용되어지는 라이브러리, 프레임워크들이 SLF4J를 통해서 logging을 처리하고 있다면
시스템에서 사용하고 있는 logging framework로도 모든 라이브러리, 프레임워크들의 로그를 살펴볼 수도 있을 것입니다.
물론 너무 많은 로그가 남겨질테니 출력 대상 package를 설정이 필요합니다.
SLF4J를 사용하고 있지 않은 라이브러리라면 해당 라이브러리가 사용하는 logging framework를 따로 구성해줘야될 것입니다.
라이브러리를 배포하시는 분이나
오픈소스 프로그램을 만드시는 분들은
SLF4J를 사용해주시면 사용자들이 더 쉽게 더 깊게 사용할 수 있을 것입니다.
References
Associated Posts
관련된 주제를 살펴볼 수 있도록 동일한 Tag를 가진 글들을 모아뒀습니다. 제목을 눌러주세요.-
JWT 에 대한 경험담
(이미지 출처 : https://jwt.io)JWT(JSON Web Token) 를 사용한 인증처리를 갖춘 시스템들을 구축해보면서 기억에 남았던 것들을 적어보겠습니다.
JWT에 대한 기본적인 설명들은 다른 곳에서도 쉽게 접할 수 있으니 생략하도록 하겠습니다.... 더 읽기 -
코드 의존성 Visualization Tools
코드간 의존성이 얼마나 있는지 파악하기 위해 사용할 수 있는 visualization tools 를 기록합니다.
... 더 읽기 -
LoadBalancer 관련 GCP 트러블슈팅
(이미지 출처 : https://cloud.google.com)GCP를 이용해서 프로젝트를 진행하면서 겪은 트러블슈팅 중 load-balancer 와 과련된 건들을 공유합니다.
... 더 읽기 -
Docker 빌드 성능 개선 : dockerignore, node_modules
-
HTML Editor과 XSS(Cross Site Scripting) - Python Bleach
-
Terraform, Helm을 이용한 AWS EKS 구성
-
유용한 표준 Java RuntimeException
-
SLF4J Logger 사용법 & 잘못된 사용법: Binding Parameters, Logging Exception Stack Trace
-
Java Thread Safe Collections - List, Queue, Set, Map
-
Contract Test 없이 MSA 도전 : Contract Interface
-
Spring Cloud Gateway - Resilience4j, Kubernetes
-
MSA Micro Service Architecture - PAPI (Permissions API), Spring Cloud Gateway
-
Java Random - ThreadLocalRandom, SplittableRandom, SecureRandom
-
Java Date - Instant, LocalDateTime, ZonedDateTime
-
Java Validation - null check, Optional
-
How to initialize Java variables - Array, List, Set, Map
-
네트워크 연결여부 테스트 - 성공, 실패 케이스 기록
-
Java 변수 선언 & 초기화 방법 - Array, List, Set, Map
-
Zappa를 이용해 AWS Lambda에 Flask 올리기
-
Python3.6 설치
-
Python SimpleHTTPServer
-
Mybatis Cache 제거 방법
-
홈페이지 현황 ( Log4J 2 관련 대박사건 )
-
Python WAS 구축하기 ( Django, Nginx, Gunicorn )
-
Docker 설치 후 이미지 보관 디렉토리 변경
-
HTTPD (Apache HTTP Server) 설치하기
-
Linux에서 컴파일 설치법을 알아야하는 이유
-
Docker를 이용해서 SonarQube 간단히 설정하기
-
How To Set Up SVN(Subversion) Repositories
-
Install CentOS with Docker
-
Nginx SSL 적용방법
-
How to install Nginx & Tomcat
-
Python 학습내용 기록
-
왜 Java 8 을 공부해야 하는가?
-
Log4j 2 설정하기
-
Code Visualization Tools
-
How to install Java 8 On Ubuntu
-
HAProxy & Keepalived