/** Log request headers and body. Consumes request body and returns identical replacement. */ Request logAndReplaceRequest(String name, Request request, Object[] args) throws IOException { log.log(String.format("---> %s %s %s", name, request.getMethod(), request.getUrl())); if (logLevel.ordinal() >= LogLevel.HEADERS.ordinal()) { for (Header header : request.getHeaders()) { log.log(header.toString()); } String bodySize = "no"; TypedOutput body = request.getBody(); if (body != null) { String bodyMime = body.mimeType(); if (bodyMime != null) { log.log("Content-Type: " + bodyMime); } long bodyLength = body.length(); bodySize = bodyLength + "-byte"; if (bodyLength != -1) { log.log("Content-Length: " + bodyLength); } if (logLevel.ordinal() >= LogLevel.FULL.ordinal()) { if (!request.getHeaders().isEmpty()) { log.log(""); } if (!(body instanceof TypedByteArray)) { // Read the entire response body to we can log it and replace the original response request = Utils.readBodyToBytesIfNecessary(request); body = request.getBody(); } byte[] bodyBytes = ((TypedByteArray) body).getBytes(); String bodyCharset = MimeUtil.parseCharset(body.mimeType(), "UTF-8"); log.log(new String(bodyBytes, bodyCharset)); } else if (logLevel.ordinal() >= LogLevel.HEADERS_AND_ARGS.ordinal()) { if (!request.getHeaders().isEmpty()) { log.log("---> REQUEST:"); } for (int i = 0; i < args.length; i++) { log.log("#" + i + ": " + args[i]); } } } log.log(String.format("---> END %s (%s body)", name, bodySize)); } return request; }
/** Log response headers and body. Consumes response body and returns identical replacement. */ private Response logAndReplaceResponse(String url, Response response, long elapsedTime) throws IOException { log.log(String.format("<--- HTTP %s %s (%sms)", response.getStatus(), url, elapsedTime)); if (logLevel.ordinal() >= LogLevel.HEADERS.ordinal()) { for (Header header : response.getHeaders()) { log.log(header.toString()); } long bodySize = 0; TypedInput body = response.getBody(); if (body != null) { bodySize = body.length(); if (logLevel.ordinal() >= LogLevel.FULL.ordinal()) { if (!response.getHeaders().isEmpty()) { log.log(""); } if (!(body instanceof TypedByteArray)) { // Read the entire response body so we can log it and replace the original response response = Utils.readBodyToBytesIfNecessary(response); body = response.getBody(); } byte[] bodyBytes = ((TypedByteArray) body).getBytes(); bodySize = bodyBytes.length; String bodyMime = body.mimeType(); String bodyCharset = MimeUtil.parseCharset(bodyMime, "UTF-8"); log.log(new String(bodyBytes, bodyCharset)); } } log.log(String.format("<--- END HTTP (%s-byte body)", bodySize)); } return response; }