我正在尝试为在jersey上构建的项目的日志记录制定标准,并且我想提供一种简单的方法来记录请求信息和响应,以防发生异常。以下代码说明了我的想法:
Client client = null;
Response response = null;
try {
client = ClientBuilder.newClient();
response = client.target("<URL>")
.request(MediaType.APPLICATION_JSON)
.post(entity);
} catch( Exception ex) {
//Send information for exception mapping to a JSON log
throw new ServiceException( client,response );
}
问题是如何在我的ServiceException
课程中获得以下内容:
String url = client.getUri().toString(); //only one I could get using WebTarget
MultivaluedMap<String, String> headers = client.getHeaders();
String body = client.getEntity();
MultivaluedMap<String, String> queryParams = client.getQueryParams();
String method = client.getMethod();
我尝试访问WebTarget
,但没有运气。
提前致谢!
答案 0 :(得分:1)
泽西岛的客户端和服务器端都有logging support。该文档显示了如何使用Client
注册它。它也可以使用WebtTarget
注册。
如果您对结果不满意,并且想要实现自己的结果,我将以与Jersey相同的方式实现它:使用WriterInterceptor
的组合来记录请求实体流 1 和Client(Request|Response)Filter
2 以获取请求和响应的其他部分(例如标头和请求)线)。
您可以查看ClientLoggingFilter
和LoggingInterceptor
的来源,以获得有关实施的一些建议。
1 - 它需要使用拦截器,而不是仅仅使用过滤器来处理所有内容,因为过滤器只会为您提供预先加载的对象,它可以是任何东西,很难记录。使用输入流进行通用日志记录更容易。
2 - 请参阅Filters and Interceptors