🌐 Spring Boot에서 로그 출력하는 방법

Spring Boot에서는 로그 출력을 쉽게 설정하고 사용할 수 있습니다. 로그는 애플리케이션의 상태를 파악하고 문제를 디버깅하는 데 매우 중요한 역할을 합니다. 이번 글에서는 Spring Boot에서 로그를 출력하는 방법과 설정 방법에 대해 알아보겠습니다.

📝 Spring Boot 로깅 설정

Spring Boot는 기본적으로 Logback을 로깅 구현체로 사용합니다. Spring Boot에서는 `application.properties` 또는 `application.yml` 파일을 통해 로깅 설정을 할 수 있습니다. 기본적으로 로그 레벨은 INFO로 설정되어 있습니다. 로그 레벨을 변경하거나 로그 파일을 설정할 수 있습니다.

👉 예시: `application.properties`

logging.level.root=INFO  # 기본 로그 레벨 설정
logging.level.org.springframework.web=DEBUG  # 특정 패키지에 대해 로그 레벨 설정
logging.level.org.apache.coyote.http11=TRACE  # org.apache.coyote.http11 패키지의 로그 레벨을 TRACE로 설정

logging.file.name=app.log  # 로그 파일 이름
logging.file.path=/var/logs  # 로그 파일 경로

👉 예시: `application.yml`

logging:
  level:
    root: INFO
    org.springframework.web: DEBUG
    org.apache.coyote.http11: TRACE  # TRACE 로그 레벨 설정
  file:
    name: app.log
    path: /var/logs

위 설정에서는 `org.apache.coyote.http11` 패키지의 로그 레벨을 `TRACE`로 설정했습니다. `TRACE`는 가장 세부적인 레벨로, 로그를 통해 매우 상세한 정보를 출력할 수 있습니다. 이를 통해 HTTP 요청과 관련된 세부적인 정보를 추적할 수 있습니다.

📝 SLF4J 로그 사용하기

Spring Boot에서 로그를 출력하려면 SLF4J API를 사용합니다. SLF4J는 다양한 로깅 구현체와 통합할 수 있는 API입니다. `LoggerFactory`를 통해 로거를 생성하고, `Logger` 객체를 이용하여 로그를 출력할 수 있습니다.

👉 로그 출력 코드

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyController {
    
    // SLF4J Logger 선언
    private static final Logger logger = LoggerFactory.getLogger(MyController.class);
    
    @GetMapping("/hello")
    public String hello() {
        logger.debug("디버그 레벨 로그");
        logger.info("정보 레벨 로그");
        logger.warn("경고 레벨 로그");
        logger.error("에러 레벨 로그");
        
        return "Hello, Spring Boot!";
    }
}

📝 로그 레벨

SLF4J를 통해 출력할 수 있는 로그 레벨에는 4가지가 있습니다. 각 로그 레벨은 로그의 중요도를 나타냅니다.

  • DEBUG: 개발 중에 유용한 정보를 출력하는 레벨입니다. 디버깅을 할 때 주로 사용됩니다.
  • INFO: 애플리케이션의 주요 흐름을 나타내는 로그입니다.
  • WARN: 경고 메시지로, 큰 문제는 아니지만 주의해야 할 상황을 알립니다.
  • ERROR: 오류가 발생했을 때 출력되는 로그입니다.
  • TRACE: 가장 상세한 로그 레벨로, 매우 세부적인 정보 출력에 사용됩니다. 주로 개발 중에 트러블슈팅을 위해 사용됩니다.

📝 Logback 설정 파일 커스터마이징

Spring Boot에서 로그 출력을 더 세밀하게 제어하려면 Logback 설정 파일을 사용하여 로그 출력을 커스터마이징할 수 있습니다. `logback-spring.xml` 파일을 생성하여 콘솔 출력 형식, 로그 파일 경로, 로그 레벨 등을 설정할 수 있습니다.

예시: `logback-spring.xml`

<configuration>
    <!-- 콘솔 로그 출력 설정 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern>
        </encoder>
    </appender>
    
    <!-- 파일 로그 출력 설정 -->
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>/var/logs/app.log</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern>
        </encoder>
    </appender>
    
    <!-- 로그 레벨 설정 -->
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>
</configuration>

📝 외부 로깅 라이브러리 사용

Spring Boot에서는 기본적으로 Logback을 사용하지만, 다른 로깅 라이브러리인 Log4j2를 사용할 수도 있습니다. 이를 위해서는 `spring-boot-starter-log4j2` 의존성을 추가하고, `log4j2-spring.xml` 파일을 통해 설정을 커스터마이징할 수 있습니다.

👉 Log4j2 의존성 추가

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

이 의존성을 추가한 후, `log4j2-spring.xml` 파일을 생성하여 로그 출력을 설정할 수 있습니다.

📝 logging.level.org.apache.coyote.http11=trace

Apache Tomcat의 HTTP/1.1 커넥터를 다루는 내부 클래스입니다.
이 설정을 사용하면 다음과 같은 Tomcat 내부 동작을 로그로 확인할 수 있습니다:

  • 클라이언트 요청 파싱 과정
  • 커넥션 생성 및 종료
  • Keep-Alive 연결 처리
  • 헤더 처리 및 파이프라인 관련 정보

🎯결론

Spring Boot에서 로그를 출력하는 방법은 매우 간단하며, SLF4J와 Logback을 사용하면 다양한 로그 레벨과 설정을 통해 애플리케이션의 상태를 쉽게 모니터링하고 문제를 디버깅할 수 있습니다. 로그 출력 형식을 커스터마이징하여 더 세밀하게 로깅을 제어할 수도 있습니다. 올바른 로그 설정은 애플리케이션의 품질을 향상시키고 유지보수성을 높이는 데 중요한 역할을 합니다.

+ Recent posts