注销与HttpRequest和HttpResponse相关的所有内容的最佳做法

时间:2015-08-25 14:20:18

标签: java

我正在执行这样的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");
            }
        }
    }

还有其他什么需要记录吗?任何事情都可以做得更好/更优化吗?

1 个答案:

答案 0 :(得分:0)

我认为这主要取决于背景和您的要求。请记住,大量的日志记录也不聪明。例如,您应该以高日志级别记录例外,例如。严重或错误(取决于您正在使用的日志框架)。但是,像“尝试向http://soAndSo/whatevz发出GET请求”这样的消息可以用更低的日志级别来表示,比如DEBUG,所以你可以在生产中发生不良事件时切换代码来记录DEBUG级别的消息。

我通常看到人们对响应所做的事情是,如果根本没有响应,那么他们肯定会记录错误,但是当 时一个响应,必须检查响应的http状态代码,如果它不是你期望的(通常是200 / 2xx),你在ERROR级别记录响应正文,标题等。

在向某个正文发出POST或PUT请求时,请尝试查看请求正文和标题是否有用,例如INFO或DEBUG级别。这些事情有时可以帮助我们找出故障情况或丢失请求/丢失数据。

在消费端,您的系统理想情况下会在ERROR级别消息的no.of / rate上显示监视器,否则您只会在之后知道非常糟糕的事情它发生了,这是不利的。