1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.myfaces.tobago.internal.webapp;
21
22 import org.slf4j.Logger;
23 import org.slf4j.LoggerFactory;
24 import org.slf4j.MDC;
25
26 import javax.servlet.Filter;
27 import javax.servlet.FilterChain;
28 import javax.servlet.FilterConfig;
29 import javax.servlet.ServletException;
30 import javax.servlet.ServletRequest;
31 import javax.servlet.ServletResponse;
32 import javax.servlet.http.HttpServletRequest;
33 import javax.servlet.http.HttpSession;
34 import java.io.IOException;
35 import java.lang.invoke.MethodHandles;
36
37 public class LoggingMdcFilter implements Filter {
38 private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
39
40 @Override
41 public void init(final FilterConfig filterConfig) throws ServletException {
42 if (LOG.isInfoEnabled()) {
43 LOG.info("init " + getClass().getName());
44 }
45 }
46
47 @Override
48 public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain)
49 throws IOException, ServletException {
50
51 try {
52 if (request instanceof HttpServletRequest) {
53 final HttpServletRequest httpRequest = (HttpServletRequest) request;
54 final HttpSession session = httpRequest.getSession(false);
55 if (session != null) {
56 MDC.put("sessionId", session.getId());
57 }
58 final String remoteAddr = httpRequest.getRemoteAddr();
59 if (remoteAddr != null) {
60 MDC.put("ip", remoteAddr);
61 }
62 final String remoteUser = httpRequest.getRemoteUser();
63 if (remoteUser != null) {
64 MDC.put("user", remoteUser);
65 }
66 }
67
68 chain.doFilter(request, response);
69
70 } finally {
71 MDC.clear();
72 }
73 }
74
75 @Override
76 public void destroy() {
77
78 }
79 }