배경
애플리케이션을 운영하다 보면, 클라이언트의 요청이 어떻게 들어오는지, 어떤 데이터가 전달되는지 로그를 남겨둬야 할 때가 있다. 특히, 복잡한 API를 개발하거나, 에러 대응 및 디버깅이 필요할 때 요청 정보를 간단하게 로깅할 수 있다면 작업 효율이 크게 올라갈 것이다.
현재 진행중인 프로젝트에서 Request에 대한 로깅이 필요했고, Spring에서 제공하는 CommonsRequestLoggingFilter라는 도구를 알게되었다. 복잡한 설정 없이 손쉽게 Request 정보를 로깅할 수 있다는 장점이 있다. 이 글에서는 CommonsRequestLoggingFilter를 이용해 딸깍 한 번으로 쉽게 Request 요청을 로그로 남길 수 있는지 공유하려고 한다.
코드는 아래 링크에서 확인할 수 있다.
practice-java-spring/spring-data-envers at master · chanbinme/practice-java-spring
Contribute to chanbinme/practice-java-spring development by creating an account on GitHub.
github.com
개발 환경
- Java 17
- Spring Boot 3.4.x
- Gradle
- IntelliJ
CommonsRequestLoggingFilter이란?
CommonsRequestLoggingFilter는 Spring에서 제공하는 서블릿 필터로, HTTP 요청 정보를 자동으로 로그로 남겨주는 기능을 제공한다. 별도의 코드 작성 없이 Bean 등록과 간단한 설정만으로 로그 출력을 활성화 할 수 있다.
구현하기
RequestLoggingConfig
다른 코드를 작성할 필요 없이 아래와 같이 CommonsRequestLoggingFilter의 빈 설정만 해주면 된다.
@Configuration
public class RequestLoggingConfig {
@Bean
public CommonsRequestLoggingFilter requestLoggingFilter() {
CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter();
filter.setIncludeClientInfo(false); // IP 주소 및 사용자 에이전트 정보 포함
filter.setIncludeQueryString(false); // 쿼리 문자열 포함
filter.setIncludePayload(true); // 요청 페이로드 포함
filter.setMaxPayloadLength(10000); // 최대 페이로드 길이 설정
filter.setIncludeHeaders(false); // 헤더 정보 포함
filter.setAfterMessagePrefix("Request Data: "); // 로그 메시지 접두사 설정
return filter;
}
}
주요 설정 옵션은 아래와 같다.
- setIncludeClientInfo(boolean): 클라이언트 IP, 세션 ID 등의 정보 포함 여부
- setIncludeHeaders(boolean): HTTP 헤더 로그 포함 여부
- setIncludePayload(boolean): Request body(본문) 로그 포함 여부
- setIncludeQueryString(boolean): 쿼리 파라미터 포함 여부
- setMaxPayloadLength(int): 로그로 남기는 본문의 최대 길이 설정
application.yml
로그 출력 레벨은 기본적으로 DEBUG이므로, CommonsRequestLoggingFilter의 로깅 레벨을 DEBUG로 맞추면 로그가 남기 시작한다.
logging:
level:
org.springframework.web.filter.CommonsRequestLoggingFilter: DEBUG
테스트
PostController
@RestController
@RequestMapping("/posts")
@RequiredArgsConstructor
public class PostController {
private final PostService postService;
@PostMapping
public void createPost(@RequestBody PostCreateRequestDto postCreateRequestDto) {
postService.createPost(postCreateRequestDto);
}
}



참조
https://www.baeldung.com/spring-http-logging
'Spring' 카테고리의 다른 글
| Spring - Spring Data Envers로 엔티티 변경 이력을 쉽게 관리해보기 (2) | 2025.06.27 |
|---|---|
| Spring Kafka - 여러 타입의 메시지를 하나의 Topic에 발행하고 수신하는 방법 (MessageConverter) (0) | 2025.04.15 |
| Spring Kafka - Spring Boot에서 Kafka 사용하기 (2) | 2025.04.09 |
| Spring - Spring Boot 3.x에서 View 렌더링되지 않는 원인과 해결 방법 (0) | 2025.01.16 |
| Spring Boot - Repository 단위 테스트하기(JPA, Querydsl, Mybatis) (1) | 2024.12.31 |