/*
* RED5 Open Source Flash Server - http://code.google.com/p/red5/
*
* Copyright 2006-2012 by respective authors (see below). All rights reserved.
*
* 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.red5.logging;
import java.io.IOException;
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 org.slf4j.LoggerFactory;
import ch.qos.logback.classic.LoggerContext;
/**
* A servlet filter that puts this contexts LoggerContext into a Threadlocal variable.
*
* It removes it after the request is processed.
*
* To use it, add the following lines to a web.xml file
*<pre>
<filter>
<filter-name>LoggerContextFilter</filter-name>
<filter-class>org.red5.logging.LoggerContextFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoggerContextFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
*</pre>
*
* @author Paul Gregoire (mondain@gmail.com)
*/
public class LoggerContextFilter implements Filter {
private String contextName;
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//System.out.printf("Context name: %s\n", contextName);
LoggingContextSelector selector = (LoggingContextSelector) Red5LoggerFactory.getContextSelector();
//System.out.printf("Context select type: %s\n", selector.getClass().getName());
LoggerContext ctx = selector.getLoggerContext(contextName);
//load default logger context if its null
if (ctx == null) {
//System.out.println("Logger context was null, getting default");
ctx = (LoggerContext) LoggerFactory.getILoggerFactory();
}
//evaluate context name against logger context name
if (!contextName.equals(ctx.getName())) {
System.err.printf("Logger context name and context name dont match (%s != %s)\n", contextName, ctx.getName());
}
//System.out.printf("Logger context name: %s\n", ctx.getName());
selector.setLocalContext(ctx);
try {
chain.doFilter(request, response);
} finally {
selector.removeLocalContext();
}
}
public void init(FilterConfig config) throws ServletException {
contextName = config.getServletContext().getContextPath().replaceAll("/", "");
}
}