Logback/SLF4J 로깅 시스템

023·2024년 8월 1일
1
post-thumbnail

서론

우리는 CGV 영화 데이터를 정기적으로 크롤링하는 자동화된 시스템을 개발했다. 크롤링 스케줄링 기능을 구현한 후 다음 단계로 시스템의 성능과 상태를 실시간으로 모니터링 시스템을 통합하기로 결정했다. Logback과 SLF4J를 통한 로깅 기능 강화는 크롤링 및 스케줄링 과정의 모니터링을 효과적으로 수행하게 할 것이며, 이 글에서는 로깅 시스템 도입 이유와 Logback과 SLF4J를 선택한 이유와 이들이 어떻게 통합적으로 구현되어 우리의 시스템에서 작동하는지 설명한다.

로깅 시스템의 중요성

로깅은 시스템의 동작 상태를 기록하고, 예상치 못한 문제 또는 예외 상황을 신속하게 파악할 수 있게 해준다. 특히, 웹 크롤링과 같이 외부 시스템에 의존적인 작업을 자동화할 때, 로깅은 작업의 성공 여부, 에러 발생 시점 및 원인 분석에 필수적이다. 따라서, 로깅 시스템을 효과적으로 구현하는 것은 운영의 효율성을 높이고, 시스템 유지보수 비용을 절감하는 데 크게 기여한다.

Logback과 SLF4J를 선택한 이유

Logback은 SLF4J의 네이티브 구현으로, 성능과 유연성이 뛰어나며, SLF4J는 Java의 다양한 로깅 프레임워크 간의 호환성을 제공한다. 이 조합은 다음과 같은 이유로 선택되었다:

  1. 고성능 로깅: Logback은 로깅 시 메모리 버퍼링, 파일 I/O 최적화 등을 통해 높은 성능을 제공한다.
  2. 유연한 로깅 설정: 로그 레벨, 패턴, 출력 형식 등을 XML 또는 Groovy 기반의 설정 파일을 통해 쉽게 조정할 수 있다.
  3. 확장성과 유지보수성: SLF4J 인터페이스를 사용함으로써, 필요에 따라 다른 로깅 프레임워크로의 전환도 용이하다.

로깅 시스템 구현 방법

  1. 로깅 구성 설정

    • Logback 설정 파일(logback.xml)에서 로거, 어펜더, 필터 등을 정의하여, 로그의 출력 레벨 및 형식을 설정한다. 예를 들어, DEBUG 레벨에서는 시스템의 상세한 동작을 로깅하고, ERROR 레벨에서는 예외 상황만 로깅한다.
  2. 크롤링 작업 로깅

    • Jsoup을 사용한 크롤링 작업 중에 발생하는 각종 이벤트를 로그로 기록한다. 크롤링 시작, 종료, 데이터 추출 성공, 네트워크 에러, 파싱 에러 등의 상황을 로그로 남겨 문제 해결과 성능 모니터링을 용이하게 한다.
  3. Quartz 스케줄러 로깅

    • Quartz 스케줄러의 작업 실행과 관련된 주요 이벤트를 로그로 기록한다. 스케

줄링된 작업의 시작과 종료, 작업 실패 등을 로그로 남겨 시스템의 안정성을 감시한다.

코드 예제

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * LogbackConfig는 메시지 로깅을 위한 유틸리티 메서드를 제공합니다.
 */
public class LogbackConfig {
    // LoggerFactory를 사용하여 com.topflix.config.LogbackConfig 클래스에 대한 Logger 인스턴스를 생성합니다.
    private static final Logger logger = LoggerFactory.getLogger(LogbackConfig.class);

    /**
     * 정보 수준 메시지를 기록합니다.
     * @param message 기록할 메시지
     */
    public static void logInfo(String message) {
        // 정보 수준(info)의 메시지를 기록합니다.
        logger.info(message);
    }

    /**
     * 예외가 있는 오류 수준 메시지를 기록합니다.
     * @param message 기록할 메시지
     * @param t 기록할 예외
     */
    public static void logError(String message, Throwable t) {
        // 예외와 함께 오류 수준(error)의 메시지를 기록합니다.
        logger.error(message, t);
    }
}

결론 및 향후 계획

이 프로젝트를 통해 구축한 로깅 시스템은 크롤링과 스케줄링 작업의 투명성과 추적 가능성을 크게 향상시켰다. 앞으로도 이 시스템을 지속적으로 개선하여, 보다 신뢰할 수 있는 데이터 수집 환경을 구축해 나가겠다.

profile
Get your hands dirty

0개의 댓글