From a2fea10f509b8fc85e69923790ef79c32be8f8fa Mon Sep 17 00:00:00 2001 From: pricelees Date: Tue, 29 Jul 2025 14:04:50 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20HTTP=20=EC=9A=94=EC=B2=AD=EC=9D=84=20?= =?UTF-8?q?=EB=B0=9B=EC=95=84=20=EA=B8=B0=EB=A1=9D=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=ED=95=84=ED=84=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/log/HttpRequestLoggingFilter.kt | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/main/kotlin/roomescape/common/log/HttpRequestLoggingFilter.kt diff --git a/src/main/kotlin/roomescape/common/log/HttpRequestLoggingFilter.kt b/src/main/kotlin/roomescape/common/log/HttpRequestLoggingFilter.kt new file mode 100644 index 00000000..24f937f4 --- /dev/null +++ b/src/main/kotlin/roomescape/common/log/HttpRequestLoggingFilter.kt @@ -0,0 +1,39 @@ +package roomescape.common.log + +import io.github.oshai.kotlinlogging.KLogger +import io.github.oshai.kotlinlogging.KotlinLogging +import jakarta.servlet.FilterChain +import jakarta.servlet.http.HttpServletRequest +import jakarta.servlet.http.HttpServletResponse +import org.slf4j.MDC +import org.springframework.web.filter.OncePerRequestFilter +import org.springframework.web.util.ContentCachingRequestWrapper +import org.springframework.web.util.ContentCachingResponseWrapper + +private val log: KLogger = KotlinLogging.logger {} + +class HttpRequestLoggingFilter( + private val messageConverter: ApiLogMessageConverter +) : OncePerRequestFilter() { + override fun doFilterInternal( + request: HttpServletRequest, + response: HttpServletResponse, + filterChain: FilterChain + ) { + log.info { messageConverter.convertToHttpRequestMessage(request) } + + val cachedRequest = ContentCachingRequestWrapper(request) + val cachedResponse = ContentCachingResponseWrapper(response) + + val startTime = System.currentTimeMillis() + MDC.put("startTime", startTime.toString()) + + try { + filterChain.doFilter(cachedRequest, cachedResponse) + cachedResponse.copyBodyToResponse() + } finally { + MDC.remove("startTime") + MDC.remove("member_id") + } + } +}