[Spring] SLF4J와 Log4j, Logback

·2024년 5월 29일

spring

목록 보기
13/18

로깅

로그를 기록하는 행위를 로깅이라고 하며, 로그파일은 운영 체제나 다른 소프트웨어가 실행 중에 발생하는 이벤트나 각기 다른 사용자의 통신 소프트웨어 간의 메세지를 기록한 파일이다.

spring은 log4j와 logback을 통해 로깅기능을 제공한다.

1. SLF4J(Simple Logging Facade for Java)

SFJ는 단순한 퍼사드 패턴을 수단으로 하는 자바 로깅 API를 제공한다. 기반이 되는 로깅 백엔드는 원하는 바인딩을 클래스패스에 추가함으로써 런타임 시점에 결정된다.

한마디로 SLF4J는 추상객체로 log4j나 logback과 같은 라이브러리와 결합하여 SLF4J방식으로 로그를 남길 수 있다.

SLF4J의 강점으로는 의존성만 바꿔주면 log4j또는 logback으로 구축된 프로젝트 로깅을 서로 변경할 수 있다는 점이다.

log4j, logback, log4j2 등 SLF4J와 연동이 가능하기 때문에 앞으로도 SLF4J와 결합 가능한 형태로 로깅 라이브러리가 나올것이다. 그러기에 언제든 변경 가능한 구조로 만들어 놓는 것이 현명할 것이다.

SLF4J 동작 과정

  • 개발 시 SLF4J API를 사용하여 로깅 코드를 작성
  • 배포 시 바인딩된 Logging Framework가 실제 코드를 수행

SLF4J에서 제공하는 3가지 모듈을 통해 수행한다.

1) SLF4J Bridging Modules

다른 로깅 API로의 Logger 호출을 SLF4J 인터페이스로 리다이렉트하여 SLF4J API가 대신 처리할 수 있도록 일종의 어댑터 역할을 하는 라이브러리이다.

2) SLF4J API(인터페이스)

로깅에 대한 추상 레이어를 제공한다. 추상 메소드를 제공하기 때문에 각 API별 Binding을 통해 사용해야 한다.

3) SLF4J Binding

SLF4J 인터페이스를 Logging Framework와 연결하는 어댑터 역할을 하는 라이브러리로 SLF4J API를 구현한 클래스에서 Binding으로 연결될 Logger의 API를 호츨한다.

2. Log4j(Log for java)

log4j는 여러 자바 로깅 프레이워크들 가운데 하나이다. 최종 사용자가 제품의 문제나 정보를 식별하기 위헤, 개발하는 도중에 디버깅 등을 위해 타임스탬프 등 정해진 양식에 맟추어 화면상이나 파일로 로그를 남길 목적으로 사용된다.

구조

log4j는 세가지로 구성되어 있다.

  • Logger : 로깅을 수행하는 구성요소로 Level 속성을 통해서 출력할 로그의 레벨을 조절할 수 있다.
  • Appender : 로그 메세지가 출력될 대상을 결정하는 요소
  • Layout : 로깅 정보를 포멧팅

특징

  • 속도와 유연성을 고려하여 디자인되었으며, 속도에 최적화 되어 있다.
  • 멀티스레드 환경에서 사용해도 안전하다.
  • 계층적인 로그 설정과 처리를 지원한다.
  • 출력을 파일, 콘솔, java.io.OutputStream, java.io.Writer, TCP를 사용하는 원격서버, 원격 Unix Syslog 데몬, 원격 JMS 구독자, 윈도우NT EventLog로 보낼 수 있고, 심지어는 e-mail 로 보낼 수도 있다.
  • • 계층적인 6가지의 로그 메시지 레벨을 사용한다. (TRACE < DEBUG < INFO < WARN < ERROR < FATAL)

3. Logback

log4j보다 안정성이 높고 편리하게 log를 관리하기 위해 Logging framework인 Slf4j(Simple Logging Façade for Java)와 그 구현체로써 Logback이 고안되었다.
log4j를 토대로 새롭게 만든 Logging 라이브러리이며, slf4j를 통해 연관 라이브러리들이 다른 logging framework를 쓰더라도 logback으로 통합할 수 있다.

구조

  • Logger : 로깅을 수행하는 구성요소로 Level 속성을 통해서 출력할 로그의 레벨을 조절할 수 있다.
  • Appender : 로그 메시지가 출력될 대상을 결정하는 요소 (console / file / DB appender)
  • Encoder : Appender에 포함되어 사용자가 지정한 형식으로 표현 될 로그메시지를 변환하는 역할을 담당하는 요소

특징

  • log4j보다 약 10배 정도 빠르게 수행되도록 내부가 변경되었으며, 메모리 효율성도 좋아졌다.
  • 설정 파일을 변경하였을 경우, 서버 재기동 없이 변경 내용이 자동으로 갱신된다.
  • 서버 중지 없이 I/O Faliure에 대한 복구를 지원한다.
  • RollingFileAppender를 사용할 경우 자동적으로 오래된 로그를 지워주며 Rolling 백업을 처리한다.

4. Log4j2

Logback에서 사용할 수 있는 많은 개선 사항을 제공하는 Log4j에 대한 업그레이드 버전이다.
log4j > logback > log4j2 순으로 만들어졌으며 log4j2는 다중 스레드 시나리오에서 비동기식 로거는 Log4j 1.x 및 Logback보다 처리량이 18배 더 높고 대기 시간이 훨씬 더 짧다고 한다.

특징

  • API 분리 (Logback과 같은 다른 로깅 구현 앞에 사용될 수도 있다.)
  • 향상된 성능 (기존 로깅 대비 18배 빠른 성능)
  • 서버 재기동 없이 변경 내용이 자동으로 갱신된다.

0개의 댓글