diff options
Diffstat (limited to 'openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/servlet/LoggingFilter.java')
-rw-r--r-- | openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/servlet/LoggingFilter.java | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/servlet/LoggingFilter.java b/openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/servlet/LoggingFilter.java new file mode 100644 index 0000000000..e53f28119c --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/servlet/LoggingFilter.java @@ -0,0 +1,136 @@ +/* + * Copyright © 2016-2018 European Support Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.openecomp.sdc.logging.servlet; + +import static org.openecomp.sdc.logging.LoggingConstants.DEFAULT_PARTNER_NAME_HEADER; +import static org.openecomp.sdc.logging.LoggingConstants.DEFAULT_REQUEST_ID_HEADER; + +import java.io.IOException; +import java.util.UUID; +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import org.openecomp.sdc.logging.api.ContextData; +import org.openecomp.sdc.logging.api.Logger; +import org.openecomp.sdc.logging.api.LoggerFactory; +import org.openecomp.sdc.logging.api.LoggingContext; +import org.openecomp.sdc.logging.servlet.jaxrs.LoggingRequestFilter; +import org.openecomp.sdc.logging.servlet.jaxrs.LoggingResponseFilter; + +/** + * <p>Places logging context information. Must be configured as a servlet filter in <i>web.xml</i>. The behavior can be + * customized via init-params.</p> + * <p>Example:</p> + * <pre> + * + * <filter> + * <filter-name>LoggingServletFilter</filter-name> + * <filter-class>org.openecomp.sdc.logging.servlet.LoggingFilter</filter-class> + * <init-param> + * <param-name>requestIdHeaders</param-name> + * <param-value>X-ONAP-RequestID</param-value> + * </init-param> + * <init-param> + * <param-name>partnerNameHeaders</param-name> + * <param-value>USER_ID</param-value> + * </init-param> + * </filter> + * + * <filter-mapping> + * <filter-name>LoggingServletFilter</filter-name> + * <url-pattern>/*</url-pattern> + * </filter-mapping> + * + * </pre> + * + * @author evitaliy + * @since 25 Jul 2016 + * @deprecated Kept for backward compatibility. For JAX-RS application, use + * {@link LoggingRequestFilter} and + * {@link LoggingResponseFilter} instead. + */ +@Deprecated +public class LoggingFilter implements Filter { + + static final String MULTI_VALUE_SEPARATOR = ","; + + static final String REQUEST_ID_HEADERS_PARAM = "requestIdHeaders"; + static final String PARTNER_NAME_HEADERS_PARAM = "partnerNameHeaders"; + + private static final Logger LOGGER = LoggerFactory.getLogger(LoggingFilter.class); + + private HttpHeader requestIdHeaders; + private HttpHeader partnerNameHeaders; + + @Override + public void init(FilterConfig config) { + requestIdHeaders = getInitParam(config, REQUEST_ID_HEADERS_PARAM, DEFAULT_REQUEST_ID_HEADER); + partnerNameHeaders = getInitParam(config, PARTNER_NAME_HEADERS_PARAM, DEFAULT_PARTNER_NAME_HEADER); + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + + HttpServletRequest httpRequest = HttpServletRequest.class.cast(request); + + try { + + LoggingContext.clear(); + + ContextData.ContextDataBuilder contextData = ContextData.builder(); + + contextData.serviceName(httpRequest.getRequestURI()); + + String requestId = requestIdHeaders.getAny(httpRequest::getHeader); + contextData.requestId(requestId == null ? UUID.randomUUID().toString() : requestId); + + String partner = partnerNameHeaders.getAny(httpRequest::getHeader); + if (partner != null) { + contextData.partnerName(partner); + } + + LoggingContext.put(contextData.build()); + + chain.doFilter(request, response); + + } finally { + LoggingContext.clear(); + } + } + + @Override + public void destroy() { + // forced by the interface - not implemented + } + + private HttpHeader getInitParam(FilterConfig config, String paramName, String defaultValue) { + + String value = config.getInitParameter(paramName); + LOGGER.debug("Logging filter configuration param '{}' value '{}'", paramName, value); + + if (value == null) { + return new HttpHeader(defaultValue); + } else { + return new HttpHeader(value.split(MULTI_VALUE_SEPARATOR)); + } + } +} |