PHpullh
학습 라이브러리/Java/로깅 (SLF4J / Logback)

JAVA · 예외처리

로깅 (SLF4J / Logback)

SLF4J 로깅 퍼사드와 Logback 구현체로 체계적인 로깅을 구현합니다.

예외처리중급SLF4JLogback로깅Logger

핵심 설명

SLF4J 로깅 퍼사드와 Logback 구현체로 체계적인 로깅을 구현합니다.

Java code

// SLF4J + Logback 의존성:
// org.slf4j:slf4j-api:2.0.9
// ch.qos.logback:logback-classic:1.4.14

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

// SLF4J 표준 사용법 (의사코드)
class OrderService {
    // private static final Logger log =
    //     LoggerFactory.getLogger(OrderService.class);

    void processOrder(String orderId) {
        // log.info("주문 처리 시작: orderId={}", orderId);
        // log.debug("주문 상세: {}", orderDetail);
        // log.warn("재고 부족: product={}, stock={}", product, stock);
        // log.error("주문 처리 실패: orderId={}", orderId, exception);
    }
}

// java.util.logging (JDK 내장) 대안
import java.util.logging.*;

public class LoggingDemo {
    private static final Logger log =
        Logger.getLogger(LoggingDemo.class.getName());

    public static void main(String[] args) {
        // 레벨: SEVERE > WARNING > INFO > CONFIG > FINE > FINER > FINEST
        log.info("애플리케이션 시작");
        log.warning("메모리 사용량 높음");

        try {
            int result = 10 / 0;
        } catch (ArithmeticException e) {
            log.log(Level.SEVERE, "계산 오류", e);
        }

        // 조건부 로깅 (비용 절약)
        if (log.isLoggable(Level.FINE)) {
            log.fine("비용 큰 연산 결과: " + expensiveCalc());
        }
    }

    static String expensiveCalc() { return "결과"; }
}

학습 팁

SLF4J의 {} 플레이스홀더는 문자열 연결보다 효율적입니다. 로그 레벨이 비활성이면 문자열 생성을 건너뜁니다.

주의할 점

log.error("에러: " + e.getMessage())처럼 메시지만 기록하면 스택 트레이스를 잃습니다. 예외 객체를 마지막 인자로 전달하세요.

자주 묻는 질문

로깅 (SLF4J / Logback)란 무엇인가요?

SLF4J 로깅 퍼사드와 Logback 구현체로 체계적인 로깅을 구현합니다.

로깅 (SLF4J / Logback) 학습 시 주의할 점은 무엇인가요?

log.error("에러: " + e.getMessage()) 처럼 메시지만 기록하면 스택 트레이스를 잃습니다. 예외 객체를 마지막 인자로 전달하세요.