[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