[Logging] log4j와 slf4j 란?

웅쓰·2023년 10월 5일
0
post-thumbnail

gradle환경에서 스프링 부트로 프로젝트를 시작할 떄,
Gradle은 의존관계가 있는 라이브러리를 함께 다운로드 해옵니다.
아래와 같이 스프링부트에서 Gradle로 빌드하면 자동으로 떙겨오는? Gradle-Dependencies '스프링부트 라이브러리'의 정보를 보면
log4j와 slf4j를 찾아볼 수 있다.

log4j와 slf4j는 둘 다 Java 어플리케이션의 로깅 (logging)을 지원하는 라이브러리이지만 서로 다른 목적과 역할을 가지고 있습니다.


  • log4j:

목적: log4j는 Java 어플리케이션의 로깅을 가능하게 하는 라이브러리입니다. 초기에는 매우 인기 있는 로깅 라이브러리로 알려졌으며 여전히 많은 프로젝트에서 사용되고 있습니다.

특징: log4j는 다양한 로깅 레벨과 로깅 메시지 형식을 지원하며, 로깅 메시지를 다양한 대상 (예: 파일, 콘솔, 원격 서버)에 기록할 수 있도록 확장 가능합니다.


  • slf4j (Simple Logging Facade for Java):

목적: slf4j는 로깅 시스템에 대한 추상화 레이어를 제공하는 라이브러리로, 어플리케이션 코드가 특정 로깅 라이브러리에 직접 종속되지 않도록 하고자 개발되었습니다. 즉, slf4j는 로깅 추상화 레이어로, 어플리케이션 코드가 로깅 시스템을 교체하거나 업그레이드하는 데 용이합니다.

특징: slf4j는 자체적으로 로깅 메시지를 기록하는 능력을 갖고 있지 않습니다. 대신에 slf4j를 사용하려면 실제 로깅 구현체 (예: log4j, Logback, Java Util Logging)를 함께 사용해야 합니다. 이것은 slf4j의 핵심 장점 중 하나로, 로깅 구현체를 언제든지 교체할 수 있게 해줍니다.


실무에서 콘솔로그를 사용하지 않고 로깅을 사용하는 이유는 다음과 같습니다:

  • 유연성: 로깅 라이브러리를 사용하면 로그 메시지를 다양한 대상에 쉽게 라우팅할 수 있습니다. 예를 들어, 개발 중에는 콘솔에 로그를 출력하고, 프로덕션 환경에서는 파일 또는 원격 서버에 로그를 기록할 수 있습니다.

  • 보안: 콘솔 로그는 어플리케이션의 상태와 중요 정보를 노출시킬 수 있으므로 보안에 취약할 수 있습니다. 로깅 시스템을 사용하면 로그를 안전하게 저장하고 액세스 제어를 할 수 있습니다.

  • 오류 디버깅: 로깅을 사용하면 프로덕션 환경에서 발생하는 오류를 식별하고 디버그하는 데 도움이 됩니다. 로그 메시지를 저장하면 시스템 동작을 추적하고 문제를 해결하는 데 유용합니다.

  • 성능 튜닝: 로깅 라이브러리는 로깅 수준을 조정하여 로그의 양을 제어하는 기능을 제공합니다. 이를 통해 성능을 튜닝하고 불필요한 로그를 줄일 수 있습니다.

  • 이력 보존: 로깅은 어플리케이션의 동작과 이력을 기록하는 데 사용됩니다. 이러한 로그는 나중에 문제 분석, 오류 추적, 보고서 생성 등에 활용됩니다.


profile
개발만이 살길

0개의 댓글

Powered by GraphCDN, the GraphQL CDN