All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.red5.logging.LoggerContextFilter Maven / Gradle / Ivy

Go to download

Ant Media Server supports RTMP, RTSP, MP4, HLS, WebRTC, Adaptive Streaming, etc.

There is a newer version: 2.10.0
Show newest version
/*
 * RED5 Open Source Media Server - https://github.com/Red5/
 * 
 * Copyright 2006-2016 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.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import org.springframework.web.context.ConfigurableWebApplicationContext;
import org.springframework.web.context.WebApplicationContext;

import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.selector.ContextSelector;

/**
 * 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
 *
 * 
 * 	<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>
 * 
* * @author Paul Gregoire ([email protected]) */ public class LoggerContextFilter implements Filter { private String contextName; public void init(FilterConfig config) throws ServletException { ServletContext servletContext = config.getServletContext(); contextName = servletContext.getContextPath().replaceAll("/", ""); if ("".equals(contextName)) { contextName = "root"; } System.out.printf("Filter init: %s%n", contextName); ConfigurableWebApplicationContext appctx = (ConfigurableWebApplicationContext) servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE); if (appctx != null) { System.out.printf("ConfigurableWebApplicationContext is not null in LoggerContextFilter for: %s, this indicates a misconfiguration or load order problem%n", contextName); } } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { LoggerContext context = (LoggerContext) request.getServletContext().getAttribute(Red5LoggerFactory.LOGGER_CONTEXT_ATTRIBUTE); // get the selector ContextSelector selector = Red5LoggerFactory.getContextSelector(); if (context != null) { // set the thread local ref ((LoggingContextSelector) selector).setLocalContext(context); } else { System.err.printf("No context named %s was found%n", contextName); } chain.doFilter(request, response); // remove the thread local ref so that log contexts dont use the wrong contextName ((LoggingContextSelector) selector).removeLocalContext(); } public void destroy() { } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy