2025. 2. 28. 02:40ㆍSpring Framework/Web on Servlet Stack
Spring MVC에서 로깅(logging)은 애플리케이션의 동작을 추적하고 디버깅하는 데 필수적인 기능입니다.
특히, Spring MVC의 DEBUG 및 TRACE 레벨 로깅은 가독성이 좋고, 최소한의 정보로도 유용한 디버깅이 가능하도록 설계되어 있습니다.
1. Spring MVC의 로깅 레벨(Log Level)
Spring MVC에서 로그는 다양한 레벨(level)을 지원하며, 목적에 따라 적절한 레벨을 설정할 수 있습니다.
로그 레벨 | 설명 |
---|---|
ERROR | 애플리케이션에서 치명적인 오류 발생 시 기록 |
WARN | 애플리케이션이 정상 동작하지만 주의해야 할 사항 기록 |
INFO | 주요 이벤트나 상태 변경 사항을 기록 |
DEBUG | 디버깅을 위해 상세한 정보를 기록 |
TRACE | DEBUG보다 더 상세한 정보를 기록 (추적 목적으로 사용) |
📌 DEBUG와 TRACE 로깅은 개발 및 디버깅에 유용하며, 운영 환경에서는 INFO 이하 레벨을 주로 사용합니다.
2. DEBUG 및 TRACE 레벨 로깅
Spring MVC에서 DEBUG 및 TRACE 레벨 로깅은 불필요한 정보가 아닌, 지속적으로 유용한 정보를 제공하는 것이 목표입니다.
📌 DEBUG 레벨의 특징
- 가독성이 좋은(minimal, human-friendly) 로그를 제공
- 반복적으로 유용한 정보 중심으로 기록
- 특정 문제를 디버깅할 때만 필요할 만한 정보는 제외
📌 TRACE 레벨의 특징
- DEBUG보다 더 상세한 정보를 제공
- 디버깅이 필요한 경우 특정 상세 로그를 활성화할 수 있음
- DEBUG 로그와 비교하여 더 세부적인 실행 흐름을 확인 가능
3. Spring MVC에서 DEBUG/TRACE 로그 활성화
Spring MVC의 로깅을 활성화하려면 로깅 프레임워크(Logback, Log4j2 등)를 설정해야 합니다.
✅ 1. logback.xml
을 이용한 설정 (Spring Boot)
Spring Boot는 디폴트로 Logback을 사용하여 로깅을 관리합니다.
📌 DEBUG 레벨 활성화 (logback.xml)
<configuration>
<logger name="org.springframework.web" level="DEBUG"/>
<logger name="org.springframework.web.servlet" level="DEBUG"/>
<logger name="org.springframework.web.filter" level="DEBUG"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
📌 설명
org.springframework.web
→ Spring MVC 관련 로그 활성화org.springframework.web.servlet
→ DispatcherServlet 관련 로그 활성화org.springframework.web.filter
→ 필터 관련 로그 활성화- 로그 출력 패턴 설정
📌 TRACE 레벨 활성화
<logger name="org.springframework.web.servlet.DispatcherServlet" level="TRACE"/>
➡ DispatcherServlet의 TRACE 로그를 활성화하여 더 자세한 요청 처리 흐름을 확인 가능
✅ 2. application.properties
를 이용한 설정 (Spring Boot)
Spring Boot에서는 application.properties
또는 application.yml
파일을 이용해 쉽게 설정할 수 있습니다.
📌 DEBUG 레벨 활성화
logging.level.org.springframework.web=DEBUG
logging.level.org.springframework.web.servlet=DEBUG
📌 TRACE 레벨 활성화
logging.level.org.springframework.web.servlet.DispatcherServlet=TRACE
4. 민감한 데이터 보호 (Sensitive Data Logging)
Spring MVC에서 DEBUG 및 TRACE 로그는 요청 파라미터 및 헤더 정보를 포함할 수 있으며, 이는 보안상 위험할 수 있습니다.
예를 들어, 로그인 요청 시 비밀번호가 로그에 기록될 수도 있습니다.
📌 Spring MVC에서는 디폴트로 요청 파라미터 및 헤더 정보를 마스킹하여 보호합니다.
그러나 필요하면 enableLoggingRequestDetails
설정을 통해 전체 요청 정보를 로깅할 수 있습니다.
✅ 민감한 데이터 로깅 활성화
DispatcherServlet
의 enableLoggingRequestDetails
설정을 true
로 변경하면 요청의 모든 정보를 로깅할 수 있음.
📌 Java 설정 예제
import jakarta.servlet.ServletRegistration;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class MyInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[]{AppConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[]{WebConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration) {
// 요청 파라미터 및 헤더 정보를 포함한 디버깅 로그 활성화
registration.setInitParameter("enableLoggingRequestDetails", "true");
}
}
📌 설명
registration.setInitParameter("enableLoggingRequestDetails", "true")
를 추가하면
요청의 전체 정보를 로깅할 수 있음.- 디폴트는 보안상 이유로 요청 파라미터 및 헤더가 마스킹 처리됨.
📌 Spring Boot 환경에서 설정 (application.properties)
spring.mvc.log-request-details=true
➡ Spring Boot에서는 spring.mvc.log-request-details=true
로 설정 가능
5. 요청/응답 로깅 필터 추가 (HandlerInterceptor 활용)
보다 상세한 요청 및 응답 정보를 로깅하려면 HandlerInterceptor를 사용하여 직접 로그를 추가할 수도 있습니다.
📌 예제: HandlerInterceptor
를 이용한 로깅
import org.springframework.web.servlet.HandlerInterceptor;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LoggingInterceptor implements HandlerInterceptor {
private static final Logger logger = LoggerFactory.getLogger(LoggingInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
logger.info("요청 URI: {}", request.getRequestURI());
logger.info("요청 메서드: {}", request.getMethod());
logger.info("요청 헤더: {}", request.getHeaderNames());
return true;
}
}
📌 설명
preHandle()
에서 요청 URI, HTTP 메서드, 헤더 정보를 로깅- 필요에 따라
postHandle()
및afterCompletion()
에서도 응답 데이터를 로깅할 수 있음
🚀 Summary
1️⃣ Spring MVC의 로깅 레벨
DEBUG
: 필요한 정보만 간결하게 로깅TRACE
: 더 상세한 요청/응답 흐름을 로깅
2️⃣ 로깅 활성화 방법
logback.xml
또는application.properties
에서 설정 가능logging.level.org.springframework.web=DEBUG
설정으로 활성화
3️⃣ 민감한 데이터 보호
- 기본적으로 요청 파라미터 및 헤더는 마스킹됨
enableLoggingRequestDetails=true
를 설정하면 전체 요청 정보 로깅 가능
4️⃣ 추가적인 로깅
HandlerInterceptor
를 사용하여 요청/응답 로그를 추가할 수도 있음
📌 Spring MVC의 로깅을 효과적으로 활용하면 디버깅과 애플리케이션 모니터링을 효율적으로 할 수 있습니다! 🚀
출처 : https://docs.spring.io/spring-framework/reference/web/webmvc/mvc-servlet/logging.html
'Spring Framework > Web on Servlet Stack' 카테고리의 다른 글
CORS (2) | 2025.03.05 |
---|---|
URI Links (0) | 2025.03.05 |
Multipart Resolver (0) | 2025.02.28 |
View Resolution (0) | 2025.02.28 |
Exceptions (0) | 2025.02.28 |