/** 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; }
private void logResponseBody(TypedInput body, Object convert) { if (logLevel.ordinal() == LogLevel.HEADERS_AND_ARGS.ordinal()) { log.log("<--- BODY:"); log.log(convert.toString()); } }