[Red5devs] [red5 commit] r3068 - in java/server/trunk: . src/org/red5/logging src/org/red5/server src/org/red5/server/net/...

codesite-noreply at google.com codesite-noreply at google.com
Thu Sep 18 17:23:53 PDT 2008


Author: mondain
Date: Thu Sep 18 17:22:38 2008
New Revision: 3068

Modified:
    java/server/trunk/ivy.xml
    java/server/trunk/red5.bat
    java/server/trunk/src/org/red5/logging/ContextLoggingListener.java
    java/server/trunk/src/org/red5/logging/LoggingContextSelector.java
    java/server/trunk/src/org/red5/server/Bootstrap.java
    java/server/trunk/src/org/red5/server/net/rtmps/TomcatRTMPSLoader.java
    java/server/trunk/src/org/red5/server/net/rtmpt/TomcatRTMPTLoader.java
    java/server/trunk/src/org/red5/server/tomcat/TomcatLoader.java
    java/server/trunk/src/org/red5/server/tomcat/TomcatVHostLoader.java
    java/server/trunk/src/org/red5/server/util/FileUtil.java

Log:
Logging for webcontexts is now fixed (when using latest jars and bootstrap)

Modified: java/server/trunk/ivy.xml
==============================================================================
--- java/server/trunk/ivy.xml	(original)
+++ java/server/trunk/ivy.xml	Thu Sep 18 17:22:38 2008
@@ -41,12 +41,12 @@
          <dependency org="jetty" name="jetty-util" rev="6.1.9" />
          <dependency org="jetty" name="jetty-xbean" rev="6.1.9" />
          <!-- Logging -->
-        <dependency name="slf4j-api" rev="1.5.2" />
-        <dependency name="jcl-over-slf4j" rev="1.5.2" />
-        <dependency name="log4j-over-slf4j" rev="1.5.2" />
-        <dependency name="jul-to-slf4j" rev="1.5.2" />
-        <dependency name="logback-core" rev="0.9.9" />
-        <dependency name="logback-classic" rev="0.9.9" />
+        <dependency name="slf4j-api" rev="1.5.3" />
+        <dependency name="jcl-over-slf4j" rev="1.5.3" />
+        <dependency name="log4j-over-slf4j" rev="1.5.3" />
+        <dependency name="jul-to-slf4j" rev="1.5.3" />
+        <dependency name="logback-core" rev="0.9.10-SNAPSHOT" />
+        <dependency name="logback-classic" rev="0.9.10-SNAPSHOT" />
          <!-- General -->
          <dependency org="cglib" name="cglib-nodep" rev="2.1_3" />
          <dependency org="commons" name="commons-beanutils" rev="1.8.0" />

Modified: java/server/trunk/red5.bat
==============================================================================
--- java/server/trunk/red5.bat	(original)
+++ java/server/trunk/red5.bat	Thu Sep 18 17:22:38 2008
@@ -1,5 +1,7 @@
  @echo off

+SETLOCAL
+
  if NOT DEFINED RED5_HOME set RED5_HOME=.

  if NOT DEFINED JAVA_HOME goto err
@@ -25,3 +27,4 @@
  pause

  :finally
+ENDLOCAL
\ No newline at end of file

Modified: java/server/trunk/src/org/red5/logging/ContextLoggingListener.java
==============================================================================
--- java/server/trunk/src/org/red5/logging/ContextLoggingListener.java	 
(original)
+++ java/server/trunk/src/org/red5/logging/ContextLoggingListener.java	Thu  
Sep 18 17:22:38 2008
@@ -31,7 +31,7 @@
  		System.out.println("Context destroying...");

  		String contextName = pathToName(event);
-		System.out.println("About to detach context named " + contextName);
+		System.out.printf("About to detach context named %s\n", contextName);

  		ContextSelector selector =  
StaticLoggerBinder.SINGLETON.getContextSelector();
  		LoggerContext context = selector.detachLoggerContext(contextName);
@@ -40,8 +40,7 @@
  			logger.info("Shutting down context {}", contextName);
  			context.shutdownAndReset();
  		} else {
-			System.err.println("No context named " + contextName
-					+ " was found.");
+			System.err.printf("No context named %s was found", contextName);
  		}
  	}

@@ -49,30 +48,29 @@
  		System.out.println("Context init...");

  		String contextName = pathToName(event);
-		System.out.println("Logger name for context: " + contextName);
+		System.out.printf("Logger name for context: %s\n", contextName);

  		try {
-			LoggingContextSelector selector = (LoggingContextSelector)  
StaticLoggerBinder.SINGLETON
-					.getContextSelector();
-
+			LoggingContextSelector selector = (LoggingContextSelector)  
StaticLoggerBinder.SINGLETON.getContextSelector();
+		
  			selector.setContextName(contextName);
-			LoggerContext context = selector.getLoggerContext();

+			LoggerContext context = selector.getLoggerContext();
  			if (context != null) {
  				Logger logger = context.getLogger(LoggerContext.ROOT_NAME);
  				logger.info("Starting up context {}", contextName);
  			} else {
-				System.err.println("No context named " + contextName
-						+ " was found.");
+				System.err.printf("No context named %s was found", contextName);
  			}
  			
-			//List<String> ctxNameList = selector.getContextNames();
-			//for (String s : ctxNameList) {
-			//	System.out.println("Selector context name: " + s);
-			//}			
+			List<String> ctxNameList = selector.getContextNames();
+			for (String s : ctxNameList) {
+				System.out.printf("Selector context name: %s\n", s);
+			}			
  			
  		} catch (Exception e) {
  			System.err.println("LoggingContextSelector is not the correct type");
+			e.printStackTrace();
  		}

  	}

Modified: java/server/trunk/src/org/red5/logging/LoggingContextSelector.java
==============================================================================
--- java/server/trunk/src/org/red5/logging/LoggingContextSelector.java	 
(original)
+++ java/server/trunk/src/org/red5/logging/LoggingContextSelector.java	Thu  
Sep 18 17:22:38 2008
@@ -34,7 +34,7 @@
  	private String contextConfigFile;

  	public LoggingContextSelector(LoggerContext context) {
-		System.out.println("Setting default logging context: " +  
context.getName());
+		System.out.printf("Setting default logging context: %s\n",  
context.getName());
  		defaultContext = context;
  	}

@@ -43,7 +43,7 @@
  		// First check if ThreadLocal has been set already
  		LoggerContext lc = threadLocal.get();
  		if (lc != null) {
-			System.out.println("Thread local found: " + lc.getName());
+			System.out.printf("Thread local found: %s\n", lc.getName());
  			return lc;
  		}

@@ -54,7 +54,7 @@
  		} else {
  			// Let's see if we already know such a context
  			LoggerContext loggerContext = contextMap.get(contextName);
-			System.out.println("Logger context for " + contextName + " is " +  
loggerContext);
+			System.out.printf("Logger context for %s is %s\n", contextName,  
loggerContext);

  			if (loggerContext == null) {
  				// We have to create a new LoggerContext
@@ -62,10 +62,17 @@
  				loggerContext.setName(contextName);

  				if (contextConfigFile == null) {
-					contextConfigFile = "logback-" + contextName + ".xml";
+					contextConfigFile = String.format("logback-%s.xml", contextName);
+					System.out.printf("Context logger config file: %s\n",  
contextConfigFile);
  				}
-
-				URL url = Loader.getResourceByTCL(contextConfigFile);
+				
+				ClassLoader classloader =  
Thread.currentThread().getContextClassLoader();
+				System.out.printf("Thread context cl: %s\n", classloader);
+				ClassLoader classloader2 = Loader.class.getClassLoader();
+				System.out.printf("Loader tcl: %s\n", classloader2);
+				
+				//URL url = Loader.getResourceBySelfClassLoader(contextConfigFile);
+				URL url = Loader.getResource(contextConfigFile, classloader);
  				if (url != null) {
  					try {
  						JoranConfigurator configurator = new JoranConfigurator();
@@ -77,13 +84,14 @@
  					}
  				} else {
  					try {
-						ContextInitializer.autoConfig(loggerContext);
+						ContextInitializer ctxInit = new ContextInitializer(loggerContext);
+						ctxInit.autoConfig();
  					} catch (JoranException je) {
  						StatusPrinter.print(loggerContext);
  					}
  				}

-				System.out.println("Adding logger context: " + loggerContext.getName()  
+ " to map for context: " + contextName);
+				System.out.printf("Adding logger context: %s to map for  
context: %s\n", loggerContext.getName(), contextName);
  				contextMap.put(contextName, loggerContext);
  			}
  			return loggerContext;
@@ -91,8 +99,8 @@
  	}

  	public LoggerContext getLoggerContext(String name) {
-		System.out.println("getLoggerContext request for " + name);
-		System.out.println("Context is in map: " + contextMap.containsKey(name));
+		System.out.printf("getLoggerContext request for %s\n", name);
+		System.out.printf("Context is in map: %s\n",  
contextMap.containsKey(name));
  		return contextMap.get(name);
  	}	
  	

Modified: java/server/trunk/src/org/red5/server/Bootstrap.java
==============================================================================
--- java/server/trunk/src/org/red5/server/Bootstrap.java	(original)
+++ java/server/trunk/src/org/red5/server/Bootstrap.java	Thu Sep 18  
17:22:38 2008
@@ -33,6 +33,7 @@
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  import org.slf4j.bridge.SLF4JBridgeHandler;
+import org.slf4j.impl.StaticLoggerBinder;
  import org.springframework.context.support.FileSystemXmlApplicationContext;

  /**
@@ -43,12 +44,18 @@
   */
  public class Bootstrap {

-    protected static Logger log = LoggerFactory.getLogger(Bootstrap.class);
  	public static void launch(URLClassLoader loader) {
  		System.setProperty("red5.deployment.type", "bootstrap");
-		try {				
+		try {	
+			//set to use our logger
+			 
System.setProperty("logback.ContextSelector", "org.red5.logging.LoggingContextSelector");
  			//install the slf4j bridge (mostly for JUL logging)
  			SLF4JBridgeHandler.install();
+			//we create the logger here so that it is instanced inside the expected
+			//classloader
+			Logger log = LoggerFactory.getLogger(Bootstrap.class);
+			//see which logger binder has been instanced
+			log.debug("Logger binder: {}",  
StaticLoggerBinder.SINGLETON.getClass().getName());
  			//set default for loading classes with url loader
  			loader.setDefaultAssertionStatus(false);
  			//create a logger before anything else happens
@@ -71,7 +78,7 @@
  		String root = System.getProperty("red5.root");

  		// if root is null find out current directory and use it as root
-		if (root == null) {
+		if (root == null || ".".equals(root)) {
  			File here = new File("thisisadummyfile");
  			if (!here.createNewFile()) {
  				System.err.println("Could not determine current directory");
@@ -79,7 +86,7 @@
  			} else {
  				root = here.getCanonicalPath().replaceFirst("thisisadummyfile",
  						"");
-				System.out.println("Current directory: " + root);
+				System.out.printf("Current directory: %s\n", root);
  				if (!here.delete()) {
  					here.deleteOnExit();
  				}
@@ -95,7 +102,7 @@
  			}
  		}
  		
-		System.out.println("Red5 root: " + root);
+		System.out.printf("Red5 root: %s\n", root);
  		
  		// look for config dir
  		String conf = System.getProperty("red5.config_root");
@@ -119,9 +126,7 @@
  			System.setProperty("red5.conf_file", "red5.xml");
  		} else {
  			//fail
-			System.err
-					.println("Configuration file was not found, server cannot start.  
Location: "
-							+ configFile.getCanonicalPath());
+			System.err.printf("Configuration file was not found, server cannot  
start. Location: %s\n", configFile.getCanonicalPath());
  			System.exit(2);
  		}

@@ -139,7 +144,7 @@
  		// add config dir
  		urls.add(new File(conf).toURI().toURL());
  		//
-		System.out.println(urls.size() + " items in the classpath");
+		System.out.printf("%d items in the classpath\n", urls.size());

  		//loop thru all the current urls
  		//System.out.println("Classpath: ");

Modified:  
java/server/trunk/src/org/red5/server/net/rtmps/TomcatRTMPSLoader.java
==============================================================================
--- java/server/trunk/src/org/red5/server/net/rtmps/TomcatRTMPSLoader.java	 
(original)
+++ java/server/trunk/src/org/red5/server/net/rtmps/TomcatRTMPSLoader.java	 
Thu Sep 18 17:22:38 2008
@@ -31,6 +31,7 @@
  import org.apache.catalina.loader.WebappLoader;
  import org.red5.server.api.IServer;
  import org.red5.server.net.rtmpt.TomcatRTMPTLoader;
+import org.red5.server.util.FileUtil;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;

@@ -83,7 +84,7 @@
  		
  		// create and add root context
  		File appDirBase = new File(webappFolder);
-		String webappContextDir =  
formatPath(appDirBase.getAbsolutePath(), "/root");
+		String webappContextDir =  
FileUtil.formatPath(appDirBase.getAbsolutePath(), "/root");
  		Context ctx = embedded.createContext("/", webappContextDir);
  		ctx.setReloadable(false);
  		log.debug("Context name: {}", ctx.getName());

Modified:  
java/server/trunk/src/org/red5/server/net/rtmpt/TomcatRTMPTLoader.java
==============================================================================
--- java/server/trunk/src/org/red5/server/net/rtmpt/TomcatRTMPTLoader.java	 
(original)
+++ java/server/trunk/src/org/red5/server/net/rtmpt/TomcatRTMPTLoader.java	 
Thu Sep 18 17:22:38 2008
@@ -33,6 +33,7 @@
  import org.apache.catalina.loader.WebappLoader;
  import org.red5.server.api.IServer;
  import org.red5.server.tomcat.TomcatLoader;
+import org.red5.server.util.FileUtil;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;

@@ -102,7 +103,7 @@
  		
  		// create and add root context
  		File appDirBase = new File(webappFolder);
-		String webappContextDir =  
formatPath(appDirBase.getAbsolutePath(), "/root");
+		String webappContextDir =  
FileUtil.formatPath(appDirBase.getAbsolutePath(), "/root");
  		Context ctx = embedded.createContext("/", webappContextDir);
  		ctx.setReloadable(false);
  		log.debug("Context name: {}", ctx.getName());

Modified: java/server/trunk/src/org/red5/server/tomcat/TomcatLoader.java
==============================================================================
--- java/server/trunk/src/org/red5/server/tomcat/TomcatLoader.java	 
(original)
+++ java/server/trunk/src/org/red5/server/tomcat/TomcatLoader.java	Thu Sep  
18 17:22:38 2008
@@ -51,6 +51,7 @@
  import org.red5.server.api.IApplicationContext;
  import org.red5.server.jmx.JMXAgent;
  import org.red5.server.jmx.JMXFactory;
+import org.red5.server.util.FileUtil;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  import org.springframework.context.ApplicationContext;
@@ -270,7 +271,8 @@
  			String dirName = '/' + dir.getName();
  			// check to see if the directory is already mapped
  			if (null == host.findChild(dirName)) {
-			    String webappContextDir = formatPath(appDirBase.getAbsolutePath(),  
dirName);
+			    String webappContextDir =  
FileUtil.formatPath(appDirBase.getAbsolutePath(), dirName);
+				log.debug("Webapp context directory (full path): {}",  
webappContextDir);
  				Context ctx = null;
  				if ("/root".equals(dirName) || "/root".equalsIgnoreCase(dirName)) {
  					log.debug("Adding ROOT context");
@@ -304,7 +306,7 @@
  		// Dump context list
  		if (log.isDebugEnabled()) {
  			for (Container cont : host.findChildren()) {
-				log.debug("Context child name: " + cont.getName());
+				log.debug("Context child name: {}", cont.getName());
  			}
  		}

@@ -479,7 +481,8 @@
  		//check if the context already exists for the host
  		if ((cont = host.findChild(contextName)) == null) {
  			log.debug("Context did not exist in host");
-			String webappContextDir = formatPath(webappFolder, applicationName);
+			String webappContextDir = FileUtil.formatPath(webappFolder,  
applicationName);
+			log.debug("Webapp context directory (full path): {}", webappContextDir);
  			//prepend slash
  			Context ctx = addContext(contextName, webappContextDir);
      		if (ctx != null) {
@@ -706,50 +709,5 @@
  			System.exit(1);
  		}
  	}
-
-    /**
-     * Quick-n-dirty directory formatting to support launching in windows,  
specifically from ant.
-     */
-    protected static String formatPath(String absWebappsPath, String  
contextDirName) {
-        StringBuilder path = new StringBuilder(absWebappsPath.length() +  
contextDirName.length());
-        path.append(absWebappsPath);
-        if (log.isDebugEnabled()) {
-        	log.debug("Path start: {}", path.toString());
-        }
-        int idx = -1;
-        if (File.separatorChar != '/') {
-            while ((idx = path.indexOf(File.separator)) != -1) {
-                path.deleteCharAt(idx);
-                path.insert(idx, '/');
-            }
-        }
-        if (log.isDebugEnabled()) {
-        	log.debug("Path step 1: {}", path.toString());
-        }
-        //remove any './'
-        if ((idx = path.indexOf("./")) != -1) {
-        	path.delete(idx, idx + 2);
-        }
-        if (log.isDebugEnabled()) {
-        	log.debug("Path step 2: {}", path.toString());
-        }
-        //add / to base path if one doesnt exist
-        if (path.charAt(path.length() - 1) != '/') {
-        	path.append('/');
-        }
-        if (log.isDebugEnabled()) {
-        	log.debug("Path step 3: {}", path.toString());
-        }
-        //remove the / from the beginning of the context dir
-        if (contextDirName.charAt(0) == '/' && path.charAt(path.length() -  
1) == '/') {
-            path.append(contextDirName.substring(1));
-        } else {
-            path.append(contextDirName);
-        }
-        if (log.isDebugEnabled()) {
-        	log.debug("Path step 4: {}", path.toString());
-        }
-        return path.toString();
-    }

  }

Modified:  
java/server/trunk/src/org/red5/server/tomcat/TomcatVHostLoader.java
==============================================================================
--- java/server/trunk/src/org/red5/server/tomcat/TomcatVHostLoader.java	 
(original)
+++ java/server/trunk/src/org/red5/server/tomcat/TomcatVHostLoader.java	Thu  
Sep 18 17:22:38 2008
@@ -41,6 +41,7 @@
  import org.red5.server.LoaderBase;
  import org.red5.server.jmx.JMXAgent;
  import org.red5.server.jmx.JMXFactory;
+import org.red5.server.util.FileUtil;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  import org.springframework.context.ApplicationContext;
@@ -122,7 +123,7 @@
  			String dirName = '/' + dir.getName();
  			// check to see if the directory is already mapped
  			if (null == host.findChild(dirName)) {
-			    String webappContextDir = formatPath(appDirBase.getAbsolutePath(),  
dirName);
+			    String webappContextDir =  
FileUtil.formatPath(appDirBase.getAbsolutePath(), dirName);
  				Context ctx = null;
  				if ("/root".equals(dirName) || "/root".equalsIgnoreCase(dirName)) {
  					log.debug("Adding ROOT context");
@@ -292,7 +293,7 @@
  		//check if the context already exists for the host
  		if ((cont = host.findChild(contextName)) == null) {
  			log.debug("Context did not exist in host");
-			String webappContextDir = formatPath(webappRoot, applicationName);
+			String webappContextDir = FileUtil.formatPath(webappRoot,  
applicationName);
  			//prepend slash
  			Context ctx = addContext(contextName, webappContextDir);
      		if (ctx != null) {

Modified: java/server/trunk/src/org/red5/server/util/FileUtil.java
==============================================================================
--- java/server/trunk/src/org/red5/server/util/FileUtil.java	(original)
+++ java/server/trunk/src/org/red5/server/util/FileUtil.java	Thu Sep 18  
17:22:38 2008
@@ -371,6 +371,51 @@

  	}
  	
+    /**
+     * Quick-n-dirty directory formatting to support launching in windows,  
specifically from ant.
+     */
+    public static String formatPath(String absWebappsPath, String  
contextDirName) {
+        StringBuilder path = new StringBuilder(absWebappsPath.length() +  
contextDirName.length());
+        path.append(absWebappsPath);
+        if (log.isDebugEnabled()) {
+        	log.debug("Path start: {}", path.toString());
+        }
+        int idx = -1;
+        if (File.separatorChar != '/') {
+            while ((idx = path.indexOf(File.separator)) != -1) {
+                path.deleteCharAt(idx);
+                path.insert(idx, '/');
+            }
+        }
+        if (log.isDebugEnabled()) {
+        	log.debug("Path step 1: {}", path.toString());
+        }
+        //remove any './'
+        if ((idx = path.indexOf("./")) != -1) {
+        	path.delete(idx, idx + 2);
+        }
+        if (log.isDebugEnabled()) {
+        	log.debug("Path step 2: {}", path.toString());
+        }
+        //add / to base path if one doesnt exist
+        if (path.charAt(path.length() - 1) != '/') {
+        	path.append('/');
+        }
+        if (log.isDebugEnabled()) {
+        	log.debug("Path step 3: {}", path.toString());
+        }
+        //remove the / from the beginning of the context dir
+        if (contextDirName.charAt(0) == '/' && path.charAt(path.length() -  
1) == '/') {
+            path.append(contextDirName.substring(1));
+        } else {
+            path.append(contextDirName);
+        }
+        if (log.isDebugEnabled()) {
+        	log.debug("Path step 4: {}", path.toString());
+        }
+        return path.toString();
+    }	
+	
  	/**
  	 * Generates a custom name containing numbers and an underscore ex.  
282818_00023.
  	 * The name contains current seconds and a random number component.



More information about the Red5devs mailing list