[java] SLF4J와 Logback의 추가 로그 앱 사용하기

소개

SLF4J (Simple Logging Facade for Java)는 자바 어플리케이션에서 로깅 기능을 추상화하기 위한 인터페이스를 제공하는 라이브러리입니다. Logback은 SLF4J를 지원하는 로깅 시스템 중 하나로, 강력한 기능과 유연성을 제공합니다. 이번 블로그에서는 SLF4J와 Logback을 사용하여 추가 로그 앱을 구현하는 방법에 대해 알아보겠습니다.

Logback 설정하기

  1. Logback 라이브러리를 프로젝트에 추가합니다. Maven을 사용하는 경우, pom.xml 파일에 다음 의존성을 추가합니다.

    <dependencies>
        ...
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        ...
    </dependencies>
    
  2. Logback 설정 파일인 logback.xml을 프로젝트의 리소스 폴더에 생성합니다. 이 파일은 로그 레벨, 로그 포맷, 로그 파일 위치 등을 설정하는데 사용됩니다. 다음은 예시 설정 파일입니다.

    <configuration>
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <appender name="FILE" class="ch.qos.logback.core.FileAppender">
            <file>logs/application.log</file>
            <encoder>
                <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <root level="INFO">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="FILE" />
        </root>
    </configuration>
    

    설정 파일에서는 콘솔과 파일 두 가지 로그 출력 장치를 정의하고, 로그 패턴 및 레벨을 설정합니다.

  3. 이제 Logback를 사용하여 로그를 기록하고자 하는 클래스에서 다음과 같이 Logger 객체를 생성하고 로그를 작성합니다.

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

    위의 예시에서는 SLF4J LoggerFactory 클래스를 사용하여 Logger 객체를 생성하고, info, debug, warn, error 레벨의 로그를 작성하고 있습니다.

추가 로그 앱 구현하기

Logback의 강력한 기능 중 하나는 로그 앱을 추가해서 사용할 수 있다는 것입니다. 로그 앱은 로깅을 통해 특정 동작이나 상황을 감지하고 이를 처리하는데 사용됩니다. 다음은 추가 로그 앱을 구현하는 예시입니다.

  1. 로그 앱을 구현할 클래스를 생성합니다. 이 클래스는 ch.qos.logback.core.Appender 클래스를 확장해야 합니다.

    import ch.qos.logback.core.AppenderBase;
    import ch.qos.logback.core.spi.DeferredProcessingAware;
    
    public class MyCustomAppender<E extends DeferredProcessingAware> extends AppenderBase<E> {
    
        @Override
        protected void append(E eventObject) {
            // 로그 이벤트 처리 로직을 작성합니다.
            // 예시: 로그 이벤트를 처리하는 외부 시스템 API 호출
        }
    }
    
  2. Logback 설정 파일에 위에서 작성한 로그 앱을 추가합니다.

    <configuration>
        ...
    
        <appender name="MY_APPENDER" class="com.example.MyCustomAppender">
            ...
        </appender>
    
        <root level="INFO">
            ...
            <appender-ref ref="MY_APPENDER" />
        </root>
    </configuration>
    

    설정 파일에서 appender-ref 요소를 사용하여 추가한 로그 앱을 루트 로거에 참조합니다.

  3. 이제 로그 앱이 작동됩니다. 설정 파일에서 정의한 로그 레벨에 따라서 MyCustomAppenderappend 메소드가 호출되며, 여기에서 원하는 로그 이벤트 처리 로직을 구현하면 됩니다.

결론

이제 SLF4J와 Logback를 사용하여 추가 로그 앱을 구현하는 방법에 대해 알아보았습니다. Logback의 강력한 기능을 활용하여 로깅 시스템을 더욱 유연하고 사용자 정의된 형태로 구성할 수 있습니다.

참고 자료