Languages/java

[JAVA] log4j와 slf4j

뱅타 2021. 4. 24. 15:35

dependency들을 하나씩 보던 중 log4j와 slf4j의 차이점에 대해 궁금증이 생기게 되었습니다.

분명 slf4j를 쓰는 이유가 있었는데... 무엇이었는지 가물가물해서 검색을 해 보았지요!!.

💡
slf4j를 써야하는 이유

간단하게 우리가 java 어플리케이션을 만들면서 왜 interface를 써야하는가와 이유가 동일합니다. 우리는 실제 코드상에서는 slf4j의 interface코드를 사용하고 실제 로깅을 하는 구현체는 추가로 참조한 라이브러리에서 구현됩니다.

import org.apache.log4j.Logger;
import org.apache.log4j.spi.LoggerFactory;

/// 생략 ///
Logger log = Logger.getLogger(this.getClass());
/// 생략 ///
log.info("blah blah log")

기존의 log4j를 사용하였을 때와 slf4j 를 사용하였을 때의 차이점.

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/// 생략 ///
Logger logger = LoggerFactory.getLogger(this.getClass());
/// 생략 ///
log.info("blah blah log")

이렇게 사용한다면 log4j의 dependency가 사리지더라도 오류가 나지 않아요.

내가 다른 로깅 라이브러리를 쓴다고 하면 그냥 기존의 참조를 지우고 새로운 로깅 모듈을 붙이기만 하면 됩니다.

개발자는 어떤 상황에든 대처하고 확장될 수 있는 느슨하고 유연한 코드를 만들어야 합니다. 따라서 하나의 라이브러리에 너무 종속적이 되버리는 코드는 가급적 작성하지 않는쪽이 좋습니다. 그렇기에 어떤 라이브러리를 쓰든 동일하게 동작하는 코드를 만들어야하고 그것이 slf4j를 써야하는 이유입니다.

최대한 결합도를 낮추는 코드를 사용하기 위해 사용했던 거였습니다!!

참조 : https://inyl.github.io/programming/2017/05/05/slf4j.html

728x90
반응형