[java] SLF4J와 Logback의 SLF4J 바인딩 사용하기

SLF4J는 Simple Logging Facade for Java의 약자로, Java 애플리케이션에서 로깅을 위한 인터페이스를 제공하는 라이브러리입니다. Logback은 SLF4J와 호환되는 로깅 구현체로, 강력한 로깅 기능과 유연한 설정 옵션을 제공합니다. 이번 글에서는 SLF4J와 Logback의 SLF4J 바인딩을 사용하는 방법에 대해 알아보겠습니다.

SLF4J 및 Logback 의존성 추가

먼저, Maven 또는 Gradle을 사용하여 SLF4J와 Logback의 의존성을 프로젝트에 추가해야 합니다. 아래의 코드를 참고하여 의존성을 추가해주세요.

Maven:

<dependencies>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.32</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.6</version>
    </dependency>
</dependencies>

Gradle:

dependencies {
    implementation 'org.slf4j:slf4j-api:1.7.32'
    implementation 'ch.qos.logback:logback-classic:1.2.6'
}

Logger 생성과 사용

Logger는 SLF4J에서 제공하는 인터페이스로, 로깅을 위한 메서드를 호출할 수 있습니다. Logger는 클래스 레벨에서 정의되며, LoggerFactory 클래스를 통해 생성됩니다. 예를 들어, 다음과 같은 코드로 Logger를 생성할 수 있습니다.

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

public class MyClass {
    private static final Logger logger = LoggerFactory.getLogger(MyClass.class);

    public void doSomething() {
        logger.info("This is an info message");
        logger.error("This is an error message");
    }
}

위의 코드에서는 MyClass라는 클래스 내에서 Logger 인스턴스를 생성하고, doSomething() 메서드 내에서 로깅 메시지를 출력하는 예시입니다.

로그 레벨 설정

Logback은 로깅 이벤트를 출력할 때 로그 레벨을 확인하고, 설정된 로그 레벨보다 낮은 레벨의 이벤트는 출력하지 않습니다. 이를 통해 로깅의 세밀한 제어가 가능합니다. 로그 레벨은 다음과 같이 설정할 수 있습니다.

<configuration>
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

위의 예제에서는 로그 레벨을 INFO로 설정하였으므로, INFO 레벨 이상의 로그 이벤트만 출력됩니다.

설정 파일 사용

Logback은 XML 형식의 설정 파일을 사용하여 로깅을 구성할 수 있습니다. 설정 파일을 사용하면 로그 레벨, 로그 포맷, 로그 출력 위치 등을 지정할 수 있습니다. 설정 파일 예제는 다음과 같습니다.

<configuration>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>logs/mylog.log</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %p %c{1} - %m%n</pattern>
        </encoder>
    </appender>
    
    <root level="INFO">
        <appender-ref ref="FILE"/>
    </root>
</configuration>

위의 예제에서는 로그를 logs/mylog.log 파일에 저장하도록 설정하였습니다. 또한, 로그 포맷은 %d{yyyy-MM-dd HH:mm:ss.SSS} %p %c{1} - %m%n로 지정되었습니다.

결론

SLF4J와 Logback의 SLF4J 바인딩을 사용하면 Java 애플리케이션에서 편리하고 유연한 로깅 기능을 이용할 수 있습니다. 로그 레벨 설정과 설정 파일을 통해 로깅을 세밀하게 제어할 수 있으며, 다양한 로그 포맷을 지원합니다. 이를 통해 애플리케이션의 로깅 성능과 유지보수성을 개선할 수 있습니다.

참고 자료