如何通过配置方式用javax.ws.rs记录应用outgoing请求(Wildfly环境)
记录Wildfly中JAX-RS客户端的所有Outgoing请求(非编程配置方式)
你需要在Wildfly环境下,通过非编程配置记录所有JAX-RS(Resteasy)客户端的outgoing请求,方便后续在Postman或curl中重建请求,以下是几种可行的配置方案:
方案一:通过Wildfly日志子系统配置
直接修改Wildfly的配置文件(standalone.xml或domain.xml)的日志子系统,启用Resteasy客户端的日志输出:
- 基础请求日志(含URL、方法、头信息)
在<subsystem xmlns="urn:jboss:domain:logging:8.0">下的<loggers>节点中添加:
<logger category="org.jboss.resteasy.client.jaxrs"> <level name="DEBUG"/> </logger>
- 完整请求/响应日志(含请求体、响应体)
如果需要获取重建请求的全部细节,添加TRACE级别的日志配置:
<logger category="org.jboss.resteasy.client.jaxrs.internal.ClientRequest"> <level name="TRACE"/> </logger>
配置完成后重启Wildfly,日志中会自动输出所有客户端发起的请求信息。
方案二:通过启动参数全局启用
无需修改配置文件,直接在Wildfly的启动脚本中添加系统属性:
- Linux/macOS(
standalone.sh):
在启动命令中追加:-Dresteasy.client.log.enabled=true -Dresteasy.client.log.level=TRACE - Windows(
standalone.bat):
在启动命令中追加:-Dresteasy.client.log.enabled=true -Dresteasy.client.log.level=TRACE
该参数会让Resteasy客户端自动输出完整的请求日志,包含URL、HTTP方法、请求头、请求体等所有重建请求需要的信息。
可选:自定义日志格式
如果需要让outgoing请求的日志更易识别,可以调整日志格式,比如在Wildfly配置文件的<formatters>节点中添加自定义格式:
<pattern-formatter name="outgoing-request-pattern" pattern="%d{HH:mm:ss,SSS} %-5p [%c] - [OUTGOING REQUEST] %m%n"/>
然后将该格式关联到对应的logger:
<logger category="org.jboss.resteasy.client.jaxrs.internal.ClientRequest"> <level name="TRACE"/> <handlers> <handler name="CONSOLE"/> <!-- 或你自定义的handler --> </handlers> <formatter name="outgoing-request-pattern"/> </logger>
你的示例代码(无需修改)
import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.Invocation; import javax.ws.rs.core.Response; import org.jboss.resteasy.client.jaxrs.ResteasyClient; import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder; import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget; public class Main { public static void main(String[] args) { ResteasyClientBuilder rcb = (ResteasyClientBuilder) ClientBuilder.newBuilder(); ResteasyClient resteasyClient = rcb.build(); ResteasyWebTarget target = resteasyClient.target("https://api.api-ninjas.com/v1/loremipsum?paragraphs=1"); Invocation.Builder builder = target.request(); // 无需修改代码,通过配置即可记录请求 Response response = builder.get(); } }
内容的提问来源于stack exchange,提问作者Lucas Pottersky
相关产品推荐
相关产品推荐

