Java apache http客户端请求属性访问

Java apache http客户端请求属性访问,java,spring,apache,Java,Spring,Apache,我在基于spring的java应用程序中使用apache http客户端库。客户需要特殊格式的附加日志记录 日志中的行应如下所示: google.com 10.13.111.101---[02/Jan/2017:20:03:16+0600][duration:10226195 us(10秒)]“POST/aaa/bbb.asmx HTTP/1.1”500 342(redir=-,SID=-)“Java1.6.0_85”发送字节数:2108 我想到了两种解决方案,但下面没有一种是理想的: 使用a

我在基于spring的java应用程序中使用apache http客户端库。客户需要特殊格式的附加日志记录

日志中的行应如下所示:

google.com 10.13.111.101---[02/Jan/2017:20:03:16+0600][duration:10226195 us(10秒)]“POST/aaa/bbb.asmx HTTP/1.1”500 342(redir=-,SID=-)“Java1.6.0_85”发送字节数:2108

我想到了两种解决方案,但下面没有一种是理想的:

  • 使用apache代理服务器-此应用程序禁止使用此服务器
  • 使用URL连接-此应用程序也不可行
  • 使用apache客户机日志记录-这提供了所有信息,但在少数几行中,解决方案之一是登录到内存并重新格式化日志,但一旦apache稍微更改日志格式,此解决方案就会失败
  • 使用反射从请求/响应访问属性-使用反射面临与上述相同的问题
  • 更改apache客户机代码本身——这也是一种丑陋的方法
我可能最终会使用的解决方案:

  • 我将把客户机封装到我的对象中,该对象记录所有内容。我不太喜欢这个解决方案,因为它将apache http客户端的功能增加了一倍。例如,如果我需要请求的持续时间,我就没有机会通过编程从请求/响应对象获得它。我需要自己测量时间。IP地址也一样。我需要额外的请求,以发现IP地址,仅用于记录目的:-(
有什么好的:

  • 使用一些java代理框架,我简单地将其添加到spring生态系统中,它为我提供了传出/传入http请求/响应的所有信息,我可以简单地记录我需要的信息。有这样的东西吗

或者你还有其他的想法吗?

我快速查看了http客户端源代码,可以使用自定义解决方案扩展相应的类。如果可能的话,这可能是一个优雅的解决方案。感谢您的努力,最后我想我找到了解决方案:存在一个HttpRequestInterceptor和一个HttpResponseInterceptor,它可以插入HttpClient,并且似乎完成了它们的工作。一旦我完成了实现,我将为其他人提供更好的概述。