You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by ho...@apache.org on 2004/12/15 07:30:10 UTC

cvs commit: logging-log4j-sandbox/src/java/org/apache/log4j/selector ContextClassLoaderSelector.java package.html

hoju        2004/12/14 22:30:10

  Modified:    .        build.xml
               src/java/org/apache/log4j/filter MDCMatchFilter.java
               src/java/org/apache/log4j/servlet
                        InitShutdownController.java
                        ServletContextLogAppender.java
  Removed:     src/java/org/apache/log4j/selector
                        ContextClassLoaderSelector.java package.html
  Log:
  Changes to make sandbox compatible with Log4j-1.3.  Got rid of ContextClassLoaderSelector because it is just problematic.
  
  Jake
  
  Revision  Changes    Path
  1.16      +3 -14     logging-log4j-sandbox/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/logging-log4j-sandbox/build.xml,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- build.xml	2 Jul 2004 21:29:37 -0000	1.15
  +++ build.xml	15 Dec 2004 06:30:10 -0000	1.16
  @@ -16,7 +16,7 @@
     <property file="build.properties"/>
     <property file="build.properties.sample"/>
   
  -  <property name="version" value="0.3alpha"/>
  +  <property name="version" value="0.4alpha"/>
   
     <!-- The base directory relative to which most targets are built -->
     <property name="base" value="."/>
  @@ -114,11 +114,8 @@
         <include name="**/*.java"/>
         <exclude name="**/servlet/**/*.java"/>
         <!--build excludes below via chainsaw-build.xml-->
  -      <exclude name="**/chainsaw/**/*.java"/>
         <exclude name="**/jdbc/**/*.java"/>
         <exclude name="**/net/**/*.java"/>
  -      <exclude name="**/spi/**/*.java"/>
  -      <exclude name="**/xml/**/*.java"/>
         <classpath refid="compile.classpath"/>
       </javac>
     </target>
  @@ -158,9 +155,7 @@
     <!-- ================================================================= -->
     <fileset dir="${java.source.dir}" id="styled_files">
     	<include name="**/filter/*.java"/>
  -  	<include name="**/selector/*.java"/>
     	<include name="**/servlet/*.java"/>
  -  	<include name="**/helpers/*.java"/>
     </fileset>
     
     <!-- ================================================================= -->
  @@ -251,15 +246,9 @@
   
       <javadoc sourcepath="${java.source.dir}"
   						 destdir="${javadoc.dest}"
  -	           packagenames="org.apache.log4j,
  -	           				 org.apache.log4j.chainsaw,
  -	           				 org.apache.log4j.filter,
  -	           				 org.apache.log4j.helpers,
  +	           packagenames="org.apache.log4j.filter,
   	           				 org.apache.log4j.net,
  -	           				 org.apache.log4j.plugins,
  -	                         org.apache.log4j.selector,
  -	                         org.apache.log4j.servlet,
  -	           				 org.apache.log4j.xml"
  +	                         org.apache.log4j.servlet"
   						 version="true"
   						 protected="true"
   						 author="true"
  
  
  
  1.4       +3 -1      logging-log4j-sandbox/src/java/org/apache/log4j/filter/MDCMatchFilter.java
  
  Index: MDCMatchFilter.java
  ===================================================================
  RCS file: /home/cvs/logging-log4j-sandbox/src/java/org/apache/log4j/filter/MDCMatchFilter.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- MDCMatchFilter.java	28 Feb 2004 13:55:04 -0000	1.3
  +++ MDCMatchFilter.java	15 Dec 2004 06:30:10 -0000	1.4
  @@ -17,6 +17,7 @@
   package org.apache.log4j.filter;
   
   import org.apache.log4j.spi.LoggingEvent;
  +import org.apache.log4j.MDC;
   
   
   /**
  @@ -138,7 +139,8 @@
     protected boolean match(LoggingEvent event) {
       // get the mdc value for the key from the event
       // use the toString() value of the value object
  -    Object mdcObject = event.getMDC(keyToMatch);
  +    //Object mdcObject = event.getMDC(keyToMatch); //removed in Log4j-1.3
  +    Object mdcObject = MDC.get(keyToMatch);
       String mdcValue;
   
       if (mdcObject != null) {
  
  
  
  1.5       +48 -71    logging-log4j-sandbox/src/java/org/apache/log4j/servlet/InitShutdownController.java
  
  Index: InitShutdownController.java
  ===================================================================
  RCS file: /home/cvs/logging-log4j-sandbox/src/java/org/apache/log4j/servlet/InitShutdownController.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- InitShutdownController.java	15 May 2004 15:41:12 -0000	1.4
  +++ InitShutdownController.java	15 Dec 2004 06:30:10 -0000	1.5
  @@ -19,6 +19,7 @@
   import org.apache.log4j.LogManager;
   import org.apache.log4j.PropertyConfigurator;
   import org.apache.log4j.helpers.LogLog;
  +import org.apache.log4j.joran.JoranConfigurator;
   import org.apache.log4j.spi.RepositorySelector;
   import org.apache.log4j.xml.DOMConfigurator;
   
  @@ -60,13 +61,6 @@
     public static final String PARAM_LOG4J_CONFIG_PATH = "log4j-config";
   
     /**
  -   * config file re-reading specified in milliseconds config param.
  -   * Maps to web.xml &lt;context-param&gt; with
  -   * &lt;param-name&gt;log4j-cron&lt;/param-name&gt;
  -   */
  -  public static final String PARAM_LOG4J_WATCH_INTERVAL = "log4j-cron";
  -
  -  /**
      * path to be read from a log4j xml config file as a system property
      * config param. Maps to web.xml &lt;context-param&gt; with
      * &lt;param-name&gt;log4j-log-home&lt;/param-name&gt;
  @@ -97,7 +91,7 @@
         "Cleaning up Log4j resources for context: "
         + context.getServletContextName() + "...");
       context.log("Shutting down all loggers and appenders...");
  -    org.apache.log4j.LogManager.shutdown();
  +    LogManager.shutdown();
       context.log("Log4j cleaned up.");
     }
   
  @@ -109,10 +103,10 @@
      * @param context the current servlet context
      */
     public static void initializeLog4j(final ServletContext context) {
  -    ClassLoader savedClassLoader = null;
  +    //ClassLoader savedClassLoader = null;
   
       try {
  -      savedClassLoader = Thread.currentThread().getContextClassLoader();
  +      //savedClassLoader = Thread.currentThread().getContextClassLoader();
   
         //attempt to set the thread context class loader to the current class
         //loader to avoid ClassCastExceptions when this library is in a parent
  @@ -121,8 +115,8 @@
         //log4j.jar).
         //based on the following article...
         //http://www-106.ibm.com/developerworks/websphere/library/techarticles/0310_searle/searle.html
  -      Thread.currentThread().setContextClassLoader(
  -        InitShutdownController.class.getClassLoader());
  +      //Thread.currentThread().setContextClassLoader(
  +      //  InitShutdownController.class.getClassLoader());
       } catch (SecurityException se) {
         //oh, well, we tried.  Security is turned on and we aren't allowed to
         //tamper with the thread context class loader.  You're on your own!
  @@ -152,12 +146,12 @@
           displayConfigNotFoundMessage();
         }
       } finally {
  -      if (savedClassLoader != null) {
  +      //if (savedClassLoader != null) {
           //reset the thread context class loader to the original saved class
           //loader now that our purpose (avoiding class cast exceptions) has been
           //served
  -        Thread.currentThread().setContextClassLoader(savedClassLoader);
  -      }
  +        //Thread.currentThread().setContextClassLoader(savedClassLoader);
  +      //}
       }
     }
   
  @@ -238,14 +232,16 @@
       if (log4jURL != null) {
         context.log("Configuring Log4j from URL at path: /" + configPath);
   
  -      if (isXMLConfigFile) {
  +      if (isXMLConfigFile) {        
           try {
  -          DOMConfigurator.configure(log4jURL);
  -
  -          //catch (javax.xml.parsers.FactoryConfigurationError fce) {}
  +          if (joranConfiguratorAvailable()) {
  +            new JoranConfigurator().doConfigure(log4jURL, LogManager.getLoggerRepository());
  +          } else {
  +            DOMConfigurator.configure(log4jURL);
  +          }
           } catch (Exception e) {
             //report errors to server logs
  -          LogLog.error(e.getMessage());
  +          System.err.println(e.getMessage()); //TODO(Jake) - use Log4 internal logging
           }
         } else {
           Properties log4jProps = new Properties();
  @@ -257,7 +253,7 @@
             //catch (java.io.IOException ioe) {}
           } catch (Exception e) {
             //report errors to server logs
  -          LogLog.error(e.getMessage());
  +          System.err.println(e.getMessage()); //TODO(Jake) - use Log4 internal logging
           }
         }
       } else {
  @@ -277,8 +273,7 @@
     private static void configureLog4jFromFile(
       final String configPath, final ServletContext context) {
       //The webapp is deployed directly off the filesystem, not from a .war file
  -    //so we *can* do File IO. This means we can use configureAndWatch() to
  -    //re-read the the config file at defined intervals.
  +    //so we *can* do File IO.
       boolean isXMLConfigFile = (configPath.endsWith(".xml")) ? true : false;
   
       String contextPath = context.getRealPath("/");
  @@ -289,27 +284,16 @@
       if (log4jFile.canRead()) {
         log4jFile = null;
   
  -      long timerIntervalVal = getTimerIntervalFromContext(context);
  -      context.log(
  -        "Configuring Log4j from File: " + contextPath + systemConfigPath);
  +      context.log("Configuring Log4j from File: " + contextPath + systemConfigPath);
   
  -      if (timerIntervalVal > 0) {
  -        context.log(
  -          "Configuring Log4j with watch interval: " + timerIntervalVal + "ms");
  -
  -        if (isXMLConfigFile) {
  -          DOMConfigurator.configureAndWatch(
  -            contextPath + systemConfigPath, timerIntervalVal);
  +      if (isXMLConfigFile) {
  +        if (joranConfiguratorAvailable()) {
  +          new JoranConfigurator().doConfigure(contextPath + systemConfigPath, LogManager.getLoggerRepository());
           } else {
  -          PropertyConfigurator.configureAndWatch(
  -            contextPath + systemConfigPath, timerIntervalVal);
  -        }
  -      } else {
  -        if (isXMLConfigFile) {
             DOMConfigurator.configure(contextPath + systemConfigPath);
  -        } else {
  -          PropertyConfigurator.configure(contextPath + systemConfigPath);
           }
  +      } else {
  +        PropertyConfigurator.configure(contextPath + systemConfigPath);
         }
       } else {
         // The given configPath does not exist. So, let's just
  @@ -320,33 +304,11 @@
     }
   
     /**
  -   * Retrieves the timer interval from the servlet context.
  -   *
  -   * @param context the current servlet context
  -   */
  -  private static long getTimerIntervalFromContext(
  -    final ServletContext context) {
  -    String timerInterval =
  -      context.getInitParameter(PARAM_LOG4J_WATCH_INTERVAL);
  -    long timerIntervalVal = 0L;
  -
  -    if (timerInterval != null) {
  -      try {
  -        timerIntervalVal = Integer.valueOf(timerInterval).longValue();
  -      } catch (NumberFormatException nfe) {
  -        //ignore...we just won't use configureAndWatch if there is no valid int
  -        ;
  -      }
  -    }
  -
  -    return timerIntervalVal;
  -  }
  -
  -  /**
      * standard configuration not found message
      */
     private static void displayConfigNotFoundMessage() {
  -    LogLog.warn(
  +    //TODO(Jake) - use Log4 internal logging
  +    System.out.println(
         "No Log4j configuration file found at given path. "
         + "Falling back to Log4j auto-configuration.");
     }
  @@ -423,10 +385,12 @@
      * @param context the current servlet context
      */
     private static void setSelector(final ServletContext context) {
  +    //TODO(Jake) - use Log4 internal logging
  +    
       String selector = context.getInitParameter(PARAM_LOG4J_PREF_SELECTOR);
   
       if (selector == null) {
  -      LogLog.warn(
  +      System.out.println(
           "No preferred selector supplied. Using default repository selector...");
   
         return;
  @@ -438,23 +402,36 @@
         Class clazz =
           Class.forName(
             selector, true, Thread.currentThread().getContextClassLoader());
  -      LogManager.setRepositorySelector(
  -        (RepositorySelector) clazz.newInstance(), guard);
  +      RepositorySelector repositorySelector = (RepositorySelector) clazz.newInstance();
  +      //System.out.println("current logger repository is: " + LogManager.getLoggerRepository());
  +      repositorySelector.setDefaultRepository(LogManager.getLoggerRepository()); //Note: without this step, we'd take down the entire server with null pointers happening in LogManager.getLogger().  Do no remove!
  +      LogManager.setRepositorySelector(repositorySelector, guard);
       } catch (ClassNotFoundException cnfe) {
  -      LogLog.warn(
  +      System.err.println(
           "Preferred selector not found. Using default repository selector...");
       } catch (InstantiationException ie) {
  -      LogLog.warn(
  +      System.err.println(
           "Error in instantiation of preferred selector. Using default "
           + "repository selector...");
       } catch (IllegalAccessException iae) {
  -      LogLog.warn(
  +      System.err.println(
           "Unable to access preferred selector. Using default repository "
           + "selector...");
       } catch (IllegalArgumentException iae) {
  -      LogLog.warn(
  +      System.err.println(
           "Preferred repository selector not installed because one has already "
           + "exists.  No problem, using existing selector...");
       }
     }
  +
  +  private static boolean joranConfiguratorAvailable() {
  +    boolean joranAvailable = true;
  +    try {
  +      Class.forName("org.apache.joran.Interpreter", false, Thread.currentThread().getContextClassLoader());
  +    } catch (Exception e) {
  +      joranAvailable = false;
  +    }
  +    return joranAvailable;
  +  }
  +
   }
  
  
  
  1.4       +1 -1      logging-log4j-sandbox/src/java/org/apache/log4j/servlet/ServletContextLogAppender.java
  
  Index: ServletContextLogAppender.java
  ===================================================================
  RCS file: /home/cvs/logging-log4j-sandbox/src/java/org/apache/log4j/servlet/ServletContextLogAppender.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ServletContextLogAppender.java	2 Jul 2004 21:32:47 -0000	1.3
  +++ ServletContextLogAppender.java	15 Dec 2004 06:30:10 -0000	1.4
  @@ -126,7 +126,7 @@
       if (ti == null) {
           servletContext.log(s);
       } else {
  -        servletContext.log(s, ti.getThrowable());
  +        servletContext.log(s + "\n" + ti.getThrowableStrRep());
       }
   
       return;
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org