我正在执行这样的http请求:
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet httpRequest = new HttpGet("http://localhost:8080/test");
HttpResponse httpResponse = httpClient.execute(httpRequest);
注销请求/响应的所有内容的最佳方法是什么?我的意思是喜欢什么方法用于请求以及什么url和所有标题和响应代码以及响应消息体等等。
编辑:
目前我做了类似的事情:
private static void logHttpRequest(HttpMessage httpMessage) {
StringBuilder builder = new StringBuilder();
addHeaders(httpMessage, builder);
builder.append(httpMessage.toString() + "\n");
System.out.println("Request:\n" + builder.toString());
}
private static void logHttpResponse(HttpResponse httpResponse) throws IOException {
StringBuilder builder = new StringBuilder();
builder.append(httpResponse.getStatusLine() + "\n");
addHeaders(httpResponse, builder);
builder.append(EntityUtils.toString(httpResponse.getEntity()));
System.out.println("Response:\n" + builder.toString() + "\n");
}
private static void addHeaders(HttpMessage httpMessage, StringBuilder builder) {
Header[] headers = httpMessage.getAllHeaders();
if (headers != null) {
for (Header header : headers) {
builder.append(header.toString() + "\n");
}
}
}
还有其他什么需要记录吗?任何事情都可以做得更好/更优化吗?
答案 0 :(得分:0)
我认为这主要取决于背景和您的要求。请记住,大量的日志记录也不聪明。例如,您应该以高日志级别记录例外,例如。严重或错误(取决于您正在使用的日志框架)。但是,像“尝试向http://soAndSo/whatevz发出GET请求”这样的消息可以用更低的日志级别来表示,比如DEBUG,所以你可以在生产中发生不良事件时切换代码来记录DEBUG级别的消息。
我通常看到人们对响应所做的事情是,如果根本没有响应,那么他们肯定会记录错误,但是当 时一个响应,必须检查响应的http状态代码,如果它不是你期望的(通常是200 / 2xx),你在ERROR级别记录响应正文,标题等。
在向某个正文发出POST或PUT请求时,请尝试查看请求正文和标题是否有用,例如INFO或DEBUG级别。这些事情有时可以帮助我们找出故障情况或丢失请求/丢失数据。
在消费端,您的系统理想情况下会在ERROR级别消息的no.of / rate上显示监视器,否则您只会在之后知道非常糟糕的事情它发生了,这是不利的。