在 WildFly 8 中转储 HTTP 请求

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

为了在开发过程中调试 HTTP 请求,我希望我的 WildFly 8 应用服务器将 HTTP 请求(包括请求方法和标头)转储到日志文件

server.log
就好了。

在WildFly的HTTP子系统的源码中,我找到了RequestDumpingHandler和对应的日志类

io.undertow.request.dump

但是,我不知道如何安装该标头,以便它应用于我的应用程序(具有一些静态资源和 JAX-RS 处理程序的 WAR)服务的所有请求。

相应的文档页面(Undertow web 子系统配置)并没有真正解释处理程序。配置部分有一个

<handler>
元素

<?xml version="1.0" ?>
<server xmlns="urn:jboss:domain:2.1">
    ...
    <profile>
        ...
        <subsystem xmlns="urn:jboss:domain:undertow:1.1">
        <buffer-cache name="default"/>
        <server name="default-server">
            <http-listener name="default" socket-binding="http"/>
            <host name="default-host" alias="localhost">
                <location name="/" handler="welcome-content"/>
                <filter-ref name="server-header"/>
                <filter-ref name="x-powered-by-header"/>
            </host>
        </server>
        <servlet-container name="default">
            <jsp-config/>
        </servlet-container>
        <handlers>
            <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
            <!-- <dump-request /> ?? or something?-->
        </handlers>
        <filters>
            <response-header name="server-header" header-name="Server" header-value="WildFly/8"/>
            <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/>
        </filters>
        </subsystem>
        ...
    </profile>
    ...
</server>

但据我所知,那里只有

<file>
和代理(?)。

如何在 WildFly 中记录传入 HTTP 请求的完整详细信息? 我知道我可以在 JAX-RS 层安装一些日志记录机制,但我想要一个处理 REST API 调用和静态服务资源的转储机制.

logging wildfly wildfly-8
3个回答
41
投票

您需要将 RequestDumpingHandler 添加到您的处理程序链中。

作为 Wildfly 8.1 的一部分,这还不可能以友好的方式实现。

这在 8.2 和 9 中得到了改进,因此您可以通过添加如下内容来配置它:

<host name="default-host" >
     .....
     <filter-ref name="request-dumper"/>
</host>
....
<filters>
    ...
    <filter name="request-dumper" class-name="io.undertow.server.handlers.RequestDumpingHandler" module="io.undertow.core" />
</filters>

在 8.1 中,现在唯一的选择是添加 ServletExtension http://undertow.io/undertow-docs/undertow-docs-1.2.0/#servlet-extensions

这会将此 RequestDumpingHandler 添加到外链。

FWIW 8.2 版本几乎准备就绪,因此您可以等待它或只是为 8.x 分支构建源代码。

要通过 CLI 添加以上配置,您可以使用:

/subsystem=undertow/configuration=filter/custom-filter=request-dumper:add(class-name="io.undertow.server.handlers.RequestDumpingHandler",  module="io.undertow.core")
/subsystem=undertow/server=default-server/host=default-host/filter-ref=request-dumper:add

6
投票

在 Wildfly 9 和 10.1.0 上,只需添加

            <subsystem xmlns="urn:jboss:domain:undertow:3.1">
            <server name="default-server">
            <host name="default-host" alias="localhost">
                <access-log/>
            </host>
            </server>
            </sub-system>

3
投票

有很多人问如何注销整个 HTTP 主体,而不仅仅是标头。

似乎存在答案:https://8bitplatoon.blogspot.com/2017/02/dumping-http-requests-and-responses-in.html

简而言之,如果该链接无法存活,只需添加到您的 standalone.xml 即可解决问题:

<system-properties>
  <property name="com.sun.xml.ws.transport.http.HttpAdapter.dump" value="true"/>
</system-properties>

我在

<extensions>...</extensions>
之后和
<management>...</management>
之前添加了这个,重新启动了wildfly,并且能够在我的服务器日志中获得完整的HTTP主体(在我的例子中是server.log)。

据我所知,这根本不与 Undertow“请求转储器”交互或依赖于它,你可以做一个,另一个,或两者都做。

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