要在开发期间调试HTTP请求,我希望我的WildFly 8应用服务器将HTTP请求(包括请求方法和标头)转储到日志文件。 server.log
没问题。
在WildFly的HTTP子系统的来源中,我找到了RequestDumpingHandler和相应的记录类别io.undertow.request.dump
但是,我无法弄清楚,如何安装该标头,以便它应用于我的应用程序提供的所有请求(带有一些静态资源的WAR和JAX-RS处理程序)。
相应的文档页面(Undertow web subsystem configuration)并没有真正解释处理程序。配置部分中有<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调用和静态服务的资源。
答案 0 :(得分:31)
您需要将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>
在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
答案 1 :(得分:2)
有很多人在询问如何删除整个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“请求转储器”相互作用或取决于它,你可以做一个,另一个,或两者兼而有之。
答案 2 :(得分:2)
在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>