在WildFly 8中转储HTTP请求

Chr*_*ser 21 logging wildfly wildfly-8

要在开发期间调试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>
Run Code Online (Sandbox Code Playgroud)

但据我所知,只有<file>和代理人在那里(?).

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

Tom*_*rar 33

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

作为野生动物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>
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)

  • 有没有办法使用这个处理程序转储请求/响应主体,好吗? (3认同)

Kar*_*gan 5

在 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>
Run Code Online (Sandbox Code Playgroud)

  • 请注意, access-log 只是将请求写入 access.log 文件中。它不记录标题或正文。 (2认同)