🌐 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을 사용하면 다양한 로그 레벨과 설정을 통해 애플리케이션의 상태를 쉽게 모니터링하고 문제를 디버깅할 수 있습니다. 로그 출력 형식을 커스터마이징하여 더 세밀하게 로깅을 제어할 수도 있습니다. 올바른 로그 설정은 애플리케이션의 품질을 향상시키고 유지보수성을 높이는 데 중요한 역할을 합니다.
'Java > Spring Boot' 카테고리의 다른 글
[Spring Boot] Gradle VS Maven 비교 분석 (0) | 2025.04.01 |
---|---|
[Java Spring Boot] 스프링 부트에서 Swagger 사용하기 (1) | 2025.03.19 |
[java spring boot] cors 허용하는 방법 (1) | 2025.03.18 |
[spring boot] mybatis - mssql application.yml 설정 (0) | 2025.03.11 |
[spring boot] MultipartFile이란? (0) | 2025.02.27 |