Javascript 有一个很棒的库,叫做morgan,可以记录所有传入的 http 请求。想知道 Java/Kotlin 中是否有一个等效的库来记录 spring boot webflux 请求。
在查看了这个repo之后,这就是最终为我工作的东西
我也整夜尝试获取请求正文,但不断收到错误消息:每个请求仅单个订阅者。这要么是不可能的,要么是非常困难的,要么是在请求主体较大的情况下不推荐(因为它可能会阻塞您的服务器)。因此,如果您想在发布请求中记录变量,我强烈建议您将@RequestBody
对象转换为@RequestParam
查询参数。
package com.example.demo
import org.slf4j.LoggerFactory
import org.springframework.stereotype.Component
import org.springframework.web.server.ServerWebExchange
import org.springframework.web.server.WebFilter
import org.springframework.web.server.WebFilterChain
import reactor.core.publisher.Mono
@Component
class LogFilter: WebFilter {
private val logger = LoggerFactory.getLogger(LogFilter::class.java)
override fun filter(exchange: ServerWebExchange, chain: WebFilterChain): Mono<Void> {
val startTime = System.currentTimeMillis()
val request = exchange.request
val path = request.uri.path
val requestPrintMap = mutableMapOf<Any, Any>()
requestPrintMap["headers"] = request.headers
requestPrintMap["uri"] = request.uri
requestPrintMap["params"] = request.queryParams
return chain
.filter(exchange)
.doAfterTerminate {
logger.info("Served '{}' as {} in {} msec",
path,
exchange.response.statusCode,
System.currentTimeMillis() - startTime)
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句