From 58aeec4aec28b54365a850625134fe2e523db22b Mon Sep 17 00:00:00 2001 From: govind Date: Thu, 3 Nov 2016 15:22:30 +0530 Subject: [PATCH] Add support to ignore list of headers from logging --- .../cxf/ext/logging/LoggingFeature.java | 12 +++++++ .../ext/logging/slf4j/Slf4jEventSender.java | 35 ++++++++++++++++++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/LoggingFeature.java b/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/LoggingFeature.java index 1e34887bd64..bdc68e11aa7 100644 --- a/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/LoggingFeature.java +++ b/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/LoggingFeature.java @@ -18,6 +18,8 @@ */ package org.apache.cxf.ext.logging; +import java.util.List; + import org.apache.cxf.Bus; import org.apache.cxf.annotations.Provider; import org.apache.cxf.annotations.Provider.Type; @@ -51,6 +53,7 @@ public class LoggingFeature extends AbstractFeature { private LoggingOutInterceptor out; private WireTapIn wireTapIn; private PrettyLoggingFilter prettyFilter; + private List ignoreHeaders; public LoggingFeature() { this.sender = new Slf4jEventSender(); @@ -108,4 +111,13 @@ public void setLogMultipart(boolean logMultipart) { in.setLogMultipart(logMultipart); out.setLogMultipart(logMultipart); } + + public List getIgnoreHeaders() { + return ignoreHeaders; + } + + public void setIgnoreHeaders(List ignoreHeaders) { + this.ignoreHeaders = ignoreHeaders; + ((Slf4jEventSender)this.sender).setIgnoreHeaders(ignoreHeaders); + } } diff --git a/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/slf4j/Slf4jEventSender.java b/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/slf4j/Slf4jEventSender.java index db618d4e7b9..27d6a4f674c 100644 --- a/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/slf4j/Slf4jEventSender.java +++ b/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/slf4j/Slf4jEventSender.java @@ -18,11 +18,15 @@ */ package org.apache.cxf.ext.logging.slf4j; +import java.util.HashMap; import java.util.HashSet; +import java.util.List; +import java.util.Map; import java.util.Set; import javax.xml.namespace.QName; +import org.apache.cxf.common.util.CollectionUtils; import org.apache.cxf.ext.logging.event.LogEvent; import org.apache.cxf.ext.logging.event.LogEventSender; import org.slf4j.Logger; @@ -31,6 +35,8 @@ public class Slf4jEventSender implements LogEventSender { private final String logCategory; + private List ignoreHeaders; + public Slf4jEventSender(String logCategory) { this.logCategory = logCategory; @@ -61,7 +67,7 @@ public void send(LogEvent event) { if (event.getFullContentFile() != null) { put(keys, "fullContentFile", event.getFullContentFile().getAbsolutePath()); } - put(keys, "headers", event.getHeaders().toString()); + put(keys, "headers", filterHeader(event)); log.info(getLogMessage(event)); } finally { for (String key : keys) { @@ -71,6 +77,25 @@ public void send(LogEvent event) { } + private String filterHeader(LogEvent event) { + if (CollectionUtils.isEmpty(this.ignoreHeaders)) { + return event.getHeaders().toString(); + } + Map filteredHeader = new HashMap<>(); + for (String header : event.getHeaders().keySet()) { + boolean allow = true; + for (String ignoreHdr : ignoreHeaders) { + if (header.equalsIgnoreCase(ignoreHdr)) { + allow = false; + } + } + if (allow) { + filteredHeader.put(header, event.getHeaders().get(header)); + } + } + return filteredHeader.toString(); + } + private String localPart(QName name) { return name == null ? null : name.getLocalPart(); } @@ -86,4 +111,12 @@ private void put(Set keys, String key, String value) { } } + public List getIgnoreHeaders() { + return ignoreHeaders; + } + + public void setIgnoreHeaders(List ignoreHeaders) { + this.ignoreHeaders = ignoreHeaders; + } + }