Logging für ORDS Request s& Responses hinzugefügt

This commit is contained in:
2026-04-22 15:54:53 +02:00
parent 1c303f1376
commit d36b346f98
2 changed files with 56 additions and 0 deletions

View File

@@ -4,6 +4,7 @@ import jakarta.ws.rs.HeaderParam;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.core.Response;
import org.eclipse.microprofile.rest.client.annotation.RegisterProvider;
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.
*/
@RegisterRestClient(configKey = "ords-client")
@RegisterProvider(OrdsLoggingFilter.class)
public interface OrdsClient {
/**

View File

@@ -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())) + "***";
}
}