package roomescape.common.log import com.fasterxml.jackson.databind.ObjectMapper import org.springframework.boot.web.servlet.FilterRegistrationBean import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import org.springframework.context.annotation.DependsOn import org.springframework.core.Ordered import org.springframework.web.filter.OncePerRequestFilter @Configuration class LogConfiguration { @Bean @DependsOn(value = ["apiLogMessageConverter"]) fun filterRegistrationBean( apiLogMessageConverter: ApiLogMessageConverter ): FilterRegistrationBean { val filter = HttpRequestLoggingFilter(apiLogMessageConverter) return FilterRegistrationBean(filter) .apply { this.order = Ordered.HIGHEST_PRECEDENCE + 2 } } @Bean @DependsOn(value = ["apiLogMessageConverter"]) fun apiLoggingAspect(apiLogMessageConverter: ApiLogMessageConverter): ControllerLoggingAspect { return ControllerLoggingAspect(apiLogMessageConverter) } @Bean fun apiLogMessageConverter(objectMapper: ObjectMapper): ApiLogMessageConverter { return ApiLogMessageConverter(objectMapper) } }