package de.rwth.idsg.bikeman.psinterface.log;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.springframework.http.HttpRequest;
import org.springframework.http.client.ClientHttpRequestExecution;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.ClientHttpResponse;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.atomic.AtomicInteger;
/**
* @author Sevket Goekay <goekay@dbis.rwth-aachen.de>
* @since 09.10.2015
*/
@Slf4j
public class ClientLogInterceptor implements ClientHttpRequestInterceptor {
private static final String PREFIX_FORMAT = "[stationUrl=%s, requestId=%s]";
private AtomicInteger id = new AtomicInteger(0);
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body,
ClientHttpRequestExecution execution) throws IOException {
String prefix = String.format(PREFIX_FORMAT, request.getURI().toString(), id.incrementAndGet());
logRequest(prefix, body);
ClientHttpResponse response = execution.execute(request, body);
logResponse(prefix, response);
return response;
}
private void logRequest(String prefix, byte[] body) throws IOException {
String message = IOUtils.toString(body, StandardCharsets.UTF_8.name());
log.debug("{} Request: payload={}", prefix, message);
}
private void logResponse(String prefix, ClientHttpResponse response) throws IOException {
String message = IOUtils.toString(response.getBody(), StandardCharsets.UTF_8.name());
log.debug("{} Response: statusCode={}; payload={}", prefix, response.getRawStatusCode(), message);
}
}