【发布时间】:2019-02-13 12:43:33
【问题描述】:
Javascript 有一个很棒的库,叫做morgan,它可以注销所有传入的 http 请求。想知道 Java/Kotlin 中是否有用于记录 spring boot webflux 请求的等效库。
【问题讨论】:
标签: java spring-boot logging kotlin
Javascript 有一个很棒的库,叫做morgan,它可以注销所有传入的 http 请求。想知道 Java/Kotlin 中是否有用于记录 spring boot webflux 请求的等效库。
【问题讨论】:
标签: java spring-boot logging kotlin
这就是在看了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)
}
}
}
【讨论】: