我想在我的项目中添加日志,我使用webFilter
来添加日志。我想记录请求头(除了认证头),请求方法和响应代码我将以下代码添加到我的项目中:
@Component
@Slf4j
public class LogFilter implements WebFilter {
@Override
public Mono<Void> filter(ServerWebExchange serverWebExchange,
WebFilterChain webFilterChain) {
log.info("log :: requestId: {}, ip: {}, method: {},path :{}, headers: {}, response :{}",
serverWebExchange.getRequest().getId(), serverWebExchange.getRequest().getRemoteAddress(),
serverWebExchange.getRequest().getMethod(), serverWebExchange.getRequest().getPath(),
serverWebExchange.getRequest().getHeaders().entrySet()
.stream().filter(stringListEntry -> !stringListEntry.getKey().equals("Authorization")).toList(),
serverWebExchange.getResponse().getStatusCode);
return webFilterChain.filter(serverWebExchange);
}
我有所有标题和需要的信息记录,但响应代码总是200 OK
,但有些时候响应结果是400。
1条答案
按热度按时间x3naxklr1#
您的解决方案不正确,因为您在过滤器之前使用了日志记录器,如果有人订阅了它,过滤器将被触发,因此Mono/Fluw流链将稍后运行,而不是其他代码。您的控制器尚未运行,因此您过早地阅读了响应代码。请在以后使用调试模式并检查哪个调用将首先运行。
在我的解决方案中,我在等待通信结束。它可能是完整的或错误的。所以,我观察这些信号,并将记录其中之一。
一个解决方案: