Slf4j(Simple Logging Facade for Java)는 자바 애플리케이션에서 로깅을 위한 표준 인터페이스를 제공하는 라이브러리입니다. Slf4j와 호환되는 로거를 만드는 방법은 크게 두 가지로 나눌 수 있습니다: 1) Slf4j를 직접 사용하는 방법, 2) Slf4j를 기존 로깅 프레임워크와 연결하는 방법입니다. 아래에서 단계별로 설명하겠습니다. --- ### 1. Slf4j 직접 사용하기 (기본 설정) Slf4j는 자체적으로 로깅 구현체를 제공하지 않으므로, Slf4j API와 함께 실제 로깅을 처리할 백엔드(예: Logback, Log4j 등)를 설정해야 합니다. 가장 일반적인 방법은 **Logback**과 함께 사용하는 것입니다. #### 단계별 설정: 1. **의존성 추가 (Maven 사용 예시)** `pom.xml`에 Slf4j와 Logback 의존성을 추가합니다: ```xml org.slf4j slf4j-api 2.0.12 ch.qos.logback logback-classic 1.5.3 ``` 2. **로거 인스턴스 생성** 코드에서 Slf4j의 `Logger`와 `LoggerFactory`를 사용해 로거를 생성합니다: ```java 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("디버그 메시지"); logger.info("정보 메시지"); logger.warn("경고 메시지"); logger.error("에러 메시지"); } } ``` 3. **Logback 설정 파일 추가 (선택)** 기본적으로 Logback은 설정 없이도 동작하지만, 로그 출력 형식이나 레벨을 커스터마이징하려면 `src/main/resources` 디렉토리에 `logback.xml` 파일을 추가합니다: ```xml %d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n ``` - 위 설정은 콘솔에 로그를 출력하며, 로그 레벨은 `INFO` 이상으로 설정합니다. 4. **실행 확인** `doSomething()` 메서드를 호출하면 로그가 콘솔에 출력됩니다: ``` 2025-03-01 12:00:00 INFO [main] com.example.MyClass - 정보 메시지 2025-03-01 12:00:00 WARN [main] com.example.MyClass - 경고 메시지 2025-03-01 12:00:00 ERROR [main] com.example.MyClass - 에러 메시지 ``` --- ### 2. 기존 로깅 프레임워크와 Slf4j 연결하기 만약 프로젝트에서 Log4j, JUL(java.util.logging) 등 다른 로깅 프레임워크를 이미 사용 중이라면, Slf4j를 브릿지(bridge)로 활용해 통합할 수 있습니다. #### Log4j와 연결 예시: 1. **의존성 추가** Log4j를 Slf4j에 연결하려면 `log4j-slf4j-impl`을 추가합니다: ```xml org.apache.logging.log4j log4j-slf4j-impl 2.23.1 org.apache.logging.log4j log4j-core 2.23.1 ``` 2. **Log4j 설정 파일 추가** `log4j2.xml` 파일을 `src/main/resources`에 추가합니다: ```xml ``` 3. **코드에서 Slf4j 사용** Log4j가 백엔드로 동작하더라도, 코드에서는 여전히 Slf4j API를 사용합니다: ```java 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("Log4j를 통한 정보 메시지"); } } ``` --- ### 3. 커스텀 로거 구현 (직접 만드는 경우) Slf4j와 완전히 독립적인 커스텀 로거를 만들고 싶다면, Slf4j의 `ILoggerFactory`와 `Logger` 인터페이스를 구현할 수 있습니다. 하지만 이 방법은 복잡하므로, 일반적으로는 Logback이나 Log4j 같은 기존 구현체를 사용하는 것이 권장됩니다. #### 간단한 커스텀 로거 예시: 1. `Logger` 인터페이스 구현: ```java import org.slf4j.Logger; public class CustomLogger implements Logger { private final String name; public CustomLogger(String name) { this.name = name; } @Override public String getName() { return name; } @Override public boolean isInfoEnabled() { return true; } @Override public void info(String msg) { System.out.println("[INFO] " + name + " - " + msg); } // 나머지 메서드 (debug, warn, error 등) 구현 생략 } ``` 2. `ILoggerFactory` 구현: ```java import org.slf4j.ILoggerFactory; public class CustomLoggerFactory implements ILoggerFactory { @Override public Logger getLogger(String name) { return new CustomLogger(name); } } ``` 3. Slf4j에 커스텀 로거 연결: Slf4j는 기본적으로 클래스패스에서 첫 번째로 발견된 구현체를 사용하므로, 위 구현체를 빌드 경로에 포함시키고 다른 구현체(Logback, Log4j 등)를 제거하면 됩니다. --- ### 결론 - **추천 방법**: Slf4j + Logback 조합을 사용하는 것이 가장 간단하고 널리 사용됩니다. - **기존 시스템 통합**: Log4j나 JUL을 사용 중이라면 브릿지 모듈을 활용하세요. - **커스텀 필요 시**: Slf4j 인터페이스를 직접 구현할 수 있지만 유지보수와 성능을 고려해 기존 구현체를 사용하는 것이 낫습니다. 추가 질문이 있으면 언제든 물어보세요!