[java] SLF4J와 Log4j2의 함께 사용하기

많은 자바 애플리케이션에서 로깅은 중요한 부분입니다. 로그는 애플리케이션의 동작 상태를 파악하고 디버깅하는 데 도움이 됩니다. 이를 위해 SLF4J와 Log4j2를 함께 사용하여 강력하고 유연한 로깅 시스템을 구축할 수 있습니다.

SLF4J란?

SLF4J(간단한 로깅 패 Facade for Log)는 자바 애플리케이션에서 로깅 기능을 추상화하는 인터페이스를 제공합니다. 이는 여러 가지 로깅 프레임워크(예: Logback, Log4j2)와 함께 사용할 수 있습니다. SLF4J는 로깅 기능을 직접적으로 구현하지 않고, 각각의 로깅 프레임워크에서 제공하는 로깅 API로 전환합니다.

Log4j2란?

Log4j2는 Apache Software Foundation에서 개발한 강력한 로깅 프레임워크입니다. Log4j2는 뛰어난 성능과 설정이 쉬운 기능으로 널리 사용됩니다. Log4j2는 SLF4J와 연동할 수 있는 Adapter를 제공하므로, SLF4J의 인터페이스를 통해 Log4j2를 사용할 수 있습니다.

SLF4J와 Log4j2 연동하기

SLF4J와 Log4j2를 함께 사용하려면 다음 단계를 따르면 됩니다.

  1. SLF4J 및 Log4j2 종속성 추가하기

    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.32</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.14.1</version>
        </dependency>
    </dependencies>
    
  2. Log4j2 설정 파일 작성하기

    Log4j2는 XML, JSON, YAML 등 다양한 형식의 설정 파일을 지원합니다. 다음은 XML 형식의 설정 파일의 예입니다.

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration>
        <Appenders>
            <Console name="Console" target="SYSTEM_OUT">
                <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
            </Console>
        </Appenders>
        <Loggers>
            <Logger name="com.example" level="debug"/>
            <Root level="info">
                <AppenderRef ref="Console"/>
            </Root>
        </Loggers>
    </Configuration>
    

    이 설정 파일은 콘솔로 로그를 출력하는 간단한 설정을 보여줍니다.

  3. 코드에서 SLF4J 사용하기

    코드에서 SLF4J를 사용하여 로그를 기록할 수 있습니다. LoggerFactory 클래스를 사용하여 Logger 인스턴스를 가져올 수 있습니다. 다음은 SLF4J를 사용한 로그 출력의 예입니다.

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    public class MyClass {
        private static final Logger logger = LoggerFactory.getLogger(MyClass.class);
    
        public void doSomething() {
            logger.debug("Debug log");
            logger.info("Info log");
            logger.warn("Warn log");
            logger.error("Error log");
        }
    }
    

    이 예제에서는 LoggerFactory.getLogger() 메서드를 사용하여 Logger 인스턴스를 가져온 후, logger.debug(), logger.info() 등의 메서드를 사용하여 로그를 출력합니다.

SLF4J와 Log4j2를 함께 사용하면 로깅 시스템을 쉽게 구축하고 유연하게 관리할 수 있습니다. SLF4J의 인터페이스를 통해 로깅 시스템을 추상화하고, Log4j2의 강력한 기능을 활용할 수 있습니다.

참고 문서: