in log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/rest/RequestContextFilter.java [72:114]
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) {
if (servletRequest instanceof HttpServletRequest) {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
logger.trace("Starting request {}", request.getRequestURI());
try {
Enumeration<String> headers = request.getHeaderNames();
while (headers.hasMoreElements()) {
String name = headers.nextElement();
RequestContextMapping mapping = mappings.getMappingByHeader(name);
logger.debug("Got Mapping:{} for Header:{}", mapping, name);
if (mapping != null) {
if (mapping.isChained()) {
ThreadContext.put(mapping.getChainKey(), request.getHeader(name));
logger.debug("Setting Context Key:{} with value:{}", mapping.getChainKey(), request.getHeader(name));
String value = ((ChainedMapping)mapping).getSupplier().get();
ThreadContext.put(mapping.getFieldName(), value);
logger.debug("Setting Context Key:{} with value:{}", mapping.getFieldName(), value);
} else {
ThreadContext.put(mapping.getFieldName(), request.getHeader(name));
logger.debug("Setting Context Key:{} with value:{}", mapping.getFieldName(), request.getHeader(name));
}
}
}
long start = 0;
if (logger.isTraceEnabled()) {
start = System.nanoTime();
}
filterChain.doFilter(servletRequest, servletResponse);
if (logger.isTraceEnabled()) {
long elapsed = System.nanoTime() - start;
StringBuilder sb = new StringBuilder("Request ").append(request.getRequestURI()).append(" completed in ");
ElapsedUtil.addElapsed(elapsed, sb);
logger.trace(sb.toString());
}
} catch (Throwable e) {
logger.error("Application cascaded error", e);
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
} finally {
ThreadContext.clearMap();
}
}
}