日志请求体在quarkus- restasy -reactive



我想在服务器响应过滤器方法中记录请求正文。我试过了:

@ServerResponseFilter
public Uni<Void> filter(ContainerRequestContext request, ContainerResponseContext response) {
logger.info(((QuarkusResteasyReactiveRequestContext) request).getRequestEntity());
return Uni.createFrom().nullItem();
}

但它没有工作,因为:

java.lang.ClassCastException: class io.quarkus.resteasy.reactive.server.runtime.filters.PreventAbortResteasyReactiveContainerRequestContext cannot be cast to class io.quarkus.resteasy.reactive.server.runtime.QuarkusResteasyReactiveRequestContext (io.quarkus.resteasy.reactive.server.runtime.filters.PreventAbortResteasyReactiveContainerRequestContext and io.quarkus.resteasy.reactive.server.runtime.QuarkusResteasyReactiveRequestContext are in unnamed module of loader io.quarkus.bootstrap.classloading.QuarkusClassLoader @ae13544)

我怎样才能做到这一点?

这个框架还不支持。请求在这里https://github.com/quarkusio/quarkus/issues/17280

首先,在登录到控制台之前,您应该真正检查请求正文的类型是JSON XML还是任何人类可读的格式。你不希望从图片上传中发现你的日志是16gb的unicode字符大小。

这是我认为你可能正在寻找(未经测试,所以可能需要一些修复)。

@ServerResponseFilter
public Uni<Void> filter(ContainerRequestContext request, ContainerResponseContext response) {
logger.info(new String(request.getEntityStream​().readAllBytes(), StandardCharsets.UTF_8));
return Uni.createFrom().nullItem();
}

最新更新