쌓고 쌓다
[스프링 부트] 모든 요청 로그 남기기(필터) - 28 본문
서블릿 필터로 모든 요청 로그를 남겨보자.
서블릿 필터에 대한 포스팅은 작성한 적 있다.
https://non-stop.tistory.com/587
LogFilter - 로그 필터
package com.example.board.filter;
import jakarta.servlet.*;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import java.io.IOException;
import java.util.UUID;
@Slf4j
public class LogFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
log.info("log filter init");
}
@Override
public void destroy() {
log.info("log filter destroy");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
String requestURI = httpServletRequest.getRequestURI();
String uuid = UUID.randomUUID().toString();
try {
log.info("REQUEST [{}][{}]", uuid, requestURI);
chain.doFilter(request, response);
} catch (Exception e) {
throw e;
} finally {
log.info("RESPONSE [{}][{}]", uuid, requestURI);
}
}
}
필터 인터페이스를 구현하여 필터를 사용할 수 있다.
- doFilter : HTTP 요청시 doFilter가 호출된다.
- uuid : HTTP 요청을 구별하기 위해 임의의 uuid를 생성하여 사용한다.
- REQUEST "uuid" "requestURI"로 요청URI를 남긴다.
- chain.doFilter : 이 부분을 통해 다음 필터가 있으면 필터를 호출하고 필터가 없으면 서블릿을 호출한다.
- doFilter 부분이 없다면 다음 단계로 진행되지 않으니 주의!
WebConfig - 필터 설정
package com.example.board;
import com.example.board.filter.LogFilter;
import jakarta.servlet.Filter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class WebConfig {
@Bean
public FilterRegistrationBean logFilter() {
FilterRegistrationBean<Filter> filterRegistrationBean = new FilterRegistrationBean<>();
filterRegistrationBean.setFilter(new LogFilter());
filterRegistrationBean.setOrder(1);
filterRegistrationBean.addUrlPatterns("/*");
return filterRegistrationBean;
}
}
스프링 부트를 사용한다면 FilterRegisterationBean을 사용해서 등록하면 된다.
- setFilter : 등록할 필터
- setOrder : 필터 체인 순서 등록. 낮을 수록 먼저 동작
- addUrlPatterns : 필터를 적용할 URL 패턴 지정
필터 로그 결과
'프로그래밍 > spring' 카테고리의 다른 글
세션 사용하기 (0) | 2023.09.12 |
---|---|
[스프링 부트] BeanValidation 적용 - 29 (0) | 2023.09.11 |
서블릿 필터 (0) | 2023.09.10 |
[스프링 부트] 유효성 검사 @Validator - 27 (0) | 2023.09.09 |
카카오 로그인 API 및 쿠키 사용하기 (0) | 2023.09.03 |
Comments