feat: HTTP 요청을 받아 기록하는 필터

This commit is contained in:
이상진 2025-07-29 14:04:50 +09:00
parent 5e0a52cb47
commit a2fea10f50

View File

@ -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")
}
}
}