public void doFilter()

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();
            }
        }
    }