Quarkus:如何记录传入 POST 请求的正文

问题描述 投票:0回答:1

我有一个使用

quarkus-resteasy
依赖项的 Quakus 应用程序。即无反应。

我想打印(或以某种方式知道)传入的 POST 请求正文的内容。

我尝试了各种日志级别设置,如下所示:

quarkus.log.level=ALL
quarkus.log.category."io.quarkus.resteasy".level=DEBUG
quarkus.log.category."org.apache.http".level=TRACE
quarkus.http.access-log.enabled=true
quarkus.log.category."org.jboss.resteasy.plugins.providers.jackson.ResteasyJackson2Provider".level=TRACE
quarkus.log.category."org.jboss.resteasy.plugins.providers.jackson".level=TRACE

我所能得到的只是请求 URI 详细信息和响应代码详细信息。

我还按照here的建议实现了日志过滤器。但那也打印了空的身体。这是我的实现。

package com.crux.kiron.util.common;

import io.vertx.core.Future;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.http.HttpServerRequest;
import org.jboss.logging.Logger;

import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.ext.Provider;



@Provider
public class LoggingFilter implements ContainerRequestFilter {

    private static final Logger LOG = Logger.getLogger(LoggingFilter.class);

    @Context
    UriInfo info;

    @Context
    HttpServerRequest request;

    @Override
    public void filter(ContainerRequestContext context) {

        final String method = context.getMethod();
        final String path = info.getPath();
        final String address = request.remoteAddress().toString();

        Future<Buffer> body = request.body();
        body.onComplete(ar -> {
            if (ar.failed()) {
                /*...*/
            } else {
                LOG.info("Request body: " + ar.result());
            }
        });


        LOG.info("Extralog "+method+" "+path+" "+address+" "+body);
    }
}

如果有人能对此有所启发,我将不胜感激。它实际上应该像打开某个包的调试日志一样简单。但似乎涉及更多。

netty quarkus vert.x resteasy
1个回答
0
投票

我曾经通过在 ext 包中实现 ReaderInterceptor 接口来完成此操作。我记得(我无法再访问源代码),我使用 ReaderInterceptorContext 对象上的 getInputStream() 方法消耗了主体(并且可以记录它),但由于主体现在被消耗,我必须重新-通过使用 setInputStream(...) 方法“将其设置回来”来设置它,以允许下一个参与者读取正文。

我不知道这将如何与 vertx 一起发挥作用。

在一般情况下,使用 HTTP 请求的正文相当棘手。它可能会永远持续下去,所以你必须小心应用这个装饰器的资源。

© www.soinside.com 2019 - 2024. All rights reserved.