View Javadoc

1   /**
2    * Logback: the reliable, generic, fast and flexible logging framework.
3    * 
4    * Copyright (C) 1999-2006, QOS.ch
5    * 
6    * This library is free software, you can redistribute it and/or modify it under
7    * the terms of the GNU Lesser General Public License as published by the Free
8    * Software Foundation.
9    */
10  
11  package ch.qos.logback.classic.selector.servlet;
12  
13  import java.io.IOException;
14  
15  import javax.servlet.Filter;
16  import javax.servlet.FilterChain;
17  import javax.servlet.FilterConfig;
18  import javax.servlet.ServletException;
19  import javax.servlet.ServletRequest;
20  import javax.servlet.ServletResponse;
21  
22  import org.slf4j.LoggerFactory;
23  import org.slf4j.impl.StaticLoggerBinder;
24  
25  import ch.qos.logback.classic.LoggerContext;
26  import ch.qos.logback.classic.selector.ContextJNDISelector;
27  import ch.qos.logback.classic.selector.ContextSelector;
28  
29  /**
30   * A servlet filter that puts the environment-dependend
31   * LoggerContext in a Threadlocal variable.
32   * 
33   * It removes it after the request is processed.
34   *
35   * To use it, add the following lines to a web.xml file
36   * 
37   * <filter>
38   *   <filter-name>LoggerContextFilter</filter-name>
39   *   <filter-class>
40   *     ch.qos.userApp.LoggerContextFilter
41   *   </filter-class>
42   * </filter>
43   * <filter-mapping>
44   *   <filter-name>LoggerContextFilter</filter-name>
45   *   <url-pattern>/*</url-pattern>
46   * </filter-mapping>
47   * 
48   * @author S&eacute;bastien Pennec
49   */
50  public class LoggerContextFilter implements Filter {
51  
52    public void destroy() {
53      //do nothing
54    }
55  
56    public void doFilter(ServletRequest request, ServletResponse response,
57        FilterChain chain) throws IOException, ServletException {
58  
59      LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
60      ContextSelector selector = StaticLoggerBinder.getSingleton().getContextSelector();
61      ContextJNDISelector sel = null;
62  
63      if (selector instanceof ContextJNDISelector) {
64        sel = (ContextJNDISelector)selector;
65        sel.setLocalContext(lc);
66      }
67  
68      try {
69        chain.doFilter(request, response);
70      } finally {
71        if (sel != null) {
72          sel.removeLocalContext();
73        }
74      }
75    }
76  
77    public void init(FilterConfig arg0) throws ServletException {
78      //do nothing
79    }
80  }