Logging für ORDS Request s& Responses hinzugefügt
This commit is contained in:
@@ -4,6 +4,7 @@ import jakarta.ws.rs.HeaderParam;
|
|||||||
import jakarta.ws.rs.POST;
|
import jakarta.ws.rs.POST;
|
||||||
import jakarta.ws.rs.Path;
|
import jakarta.ws.rs.Path;
|
||||||
import jakarta.ws.rs.core.Response;
|
import jakarta.ws.rs.core.Response;
|
||||||
|
import org.eclipse.microprofile.rest.client.annotation.RegisterProvider;
|
||||||
import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
|
import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13,6 +14,7 @@ import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
|
|||||||
* Weitere Endpunkte zukünftiger Pipelines werden hier als neue Methoden ergänzt.
|
* Weitere Endpunkte zukünftiger Pipelines werden hier als neue Methoden ergänzt.
|
||||||
*/
|
*/
|
||||||
@RegisterRestClient(configKey = "ords-client")
|
@RegisterRestClient(configKey = "ords-client")
|
||||||
|
@RegisterProvider(OrdsLoggingFilter.class)
|
||||||
public interface OrdsClient {
|
public interface OrdsClient {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -0,0 +1,54 @@
|
|||||||
|
package de.galabau.dateieingang.ords;
|
||||||
|
|
||||||
|
import io.quarkus.logging.Log;
|
||||||
|
import jakarta.ws.rs.client.ClientRequestContext;
|
||||||
|
import jakarta.ws.rs.client.ClientRequestFilter;
|
||||||
|
import jakarta.ws.rs.client.ClientResponseContext;
|
||||||
|
import jakarta.ws.rs.client.ClientResponseFilter;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/** Loggt ORDS-Requests und -Responses im selben Format wie der DefaultClientLogger, maskiert jedoch den X-Api-Key-Header. */
|
||||||
|
public class OrdsLoggingFilter implements ClientRequestFilter, ClientResponseFilter {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void filter(ClientRequestContext ctx) {
|
||||||
|
String headers = ctx.getHeaders().entrySet().stream()
|
||||||
|
.map(e -> e.getKey() + "=" + (
|
||||||
|
"X-Api-Key".equals(e.getKey())
|
||||||
|
? mask(String.valueOf(e.getValue().getFirst()))
|
||||||
|
: e.getValue().getFirst()
|
||||||
|
))
|
||||||
|
.collect(Collectors.joining(" "));
|
||||||
|
|
||||||
|
String body = ctx.hasEntity() ? "<body>" : "Empty body";
|
||||||
|
|
||||||
|
Log.infof("Request: %s %s Headers[%s], %s", ctx.getMethod(), ctx.getUri(), headers, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void filter(ClientRequestContext req, ClientResponseContext res) throws IOException {
|
||||||
|
String headers = res.getHeaders().entrySet().stream()
|
||||||
|
.map(e -> e.getKey() + "=" + e.getValue().getFirst())
|
||||||
|
.collect(Collectors.joining(" "));
|
||||||
|
|
||||||
|
String body = "";
|
||||||
|
if (res.hasEntity()) {
|
||||||
|
byte[] bytes = res.getEntityStream().readAllBytes();
|
||||||
|
body = new String(bytes, StandardCharsets.UTF_8);
|
||||||
|
res.setEntityStream(new ByteArrayInputStream(bytes));
|
||||||
|
}
|
||||||
|
|
||||||
|
Log.infof("Response: %s %s, Status[%d %s], Headers[%s], Body:\n%s",
|
||||||
|
req.getMethod(), req.getUri(),
|
||||||
|
res.getStatus(), res.getStatusInfo().getReasonPhrase(),
|
||||||
|
headers, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String mask(String value) {
|
||||||
|
return value.substring(0, Math.min(4, value.length())) + "***";
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user