Author: carnold
Date: Thu Aug 23 12:38:38 2007
New Revision: 569127

URL: http://svn.apache.org/viewvc?rev=569127&view=rev
Log:
Bug 40212: Switch to NOPLoggerRepository if application reloading nulls 
repository selector

Added:
    logging/log4j/trunk/src/main/java/org/apache/log4j/spi/NOPLogger.java
    
logging/log4j/trunk/src/main/java/org/apache/log4j/spi/NOPLoggerRepository.java
Modified:
    logging/log4j/trunk/src/changes/changes.xml
    logging/log4j/trunk/src/main/java/org/apache/log4j/LogManager.java

Modified: logging/log4j/trunk/src/changes/changes.xml
URL: 
http://svn.apache.org/viewvc/logging/log4j/trunk/src/changes/changes.xml?rev=569127&r1=569126&r2=569127&view=diff
==============================================================================
--- logging/log4j/trunk/src/changes/changes.xml (original)
+++ logging/log4j/trunk/src/changes/changes.xml Thu Aug 23 12:38:38 2007
@@ -22,7 +22,8 @@
   <body>
   
     <release version="1.2.15" date="2007-06-27" description="SyslogAppender 
enhancements, NTEventLogAppender and Maven build.">
-          <action action="add" issue="43202">Add 'application' property 
support to SocketAppender (from 1.3)</action>
+        <action action="add" issue="40212">Switch to NOPLoggerRepository if 
application reloading nulls repositorySelector.</action>
+           <action action="add" issue="43202">Add 'application' property 
support to SocketAppender (from 1.3)</action>
         <action action="fix" issue="43200">Log4JEntityResolver will return 
null if log4j.dtd can not be found on classpath.</action>
         <action action="fix" 
issue="37736">HierarchyEventListener.removeAppenderEvent never called.</action>
         <action action="fix" issue="37560">XMLLayout does not escape CDATA 
sections within NDC or throwables.</action>

Modified: logging/log4j/trunk/src/main/java/org/apache/log4j/LogManager.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/LogManager.java?rev=569127&r1=569126&r2=569127&view=diff
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/LogManager.java 
(original)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/LogManager.java Thu Aug 
23 12:38:38 2007
@@ -22,6 +22,7 @@
 import org.apache.log4j.spi.RepositorySelector;
 import org.apache.log4j.spi.DefaultRepositorySelector;
 import org.apache.log4j.spi.RootLogger;
+import org.apache.log4j.spi.NOPLoggerRepository;
 import org.apache.log4j.helpers.Loader;
 import org.apache.log4j.helpers.OptionConverter;
 import org.apache.log4j.helpers.LogLog;
@@ -170,6 +171,11 @@
   static
   public
   LoggerRepository getLoggerRepository() {
+    if (repositorySelector == null) {
+        repositorySelector = new DefaultRepositorySelector(new 
NOPLoggerRepository());
+        guard = null;
+        LogLog.error("LogMananger.repositorySelector was null likely due to 
error in class reloading, using NOPLoggerRepository.");
+    }
     return repositorySelector.getLoggerRepository();
   }
 
@@ -180,7 +186,7 @@
   static 
   Logger getRootLogger() {
      // Delegate the actual manufacturing of the logger to the logger 
repository.
-    return repositorySelector.getLoggerRepository().getRootLogger();
+    return getLoggerRepository().getRootLogger();
   }
 
   /**
@@ -188,9 +194,9 @@
   */
   public
   static 
-  Logger getLogger(String name) {
+  Logger getLogger(final String name) {
      // Delegate the actual manufacturing of the logger to the logger 
repository.
-    return repositorySelector.getLoggerRepository().getLogger(name);
+    return getLoggerRepository().getLogger(name);
   }
 
  /**
@@ -198,9 +204,9 @@
   */
   public
   static 
-  Logger getLogger(Class clazz) {
+  Logger getLogger(final Class clazz) {
      // Delegate the actual manufacturing of the logger to the logger 
repository.
-    return repositorySelector.getLoggerRepository().getLogger(clazz.getName());
+    return getLoggerRepository().getLogger(clazz.getName());
   }
 
 
@@ -209,33 +215,33 @@
   */
   public
   static 
-  Logger getLogger(String name, LoggerFactory factory) {
+  Logger getLogger(final String name, final LoggerFactory factory) {
      // Delegate the actual manufacturing of the logger to the logger 
repository.
-    return repositorySelector.getLoggerRepository().getLogger(name, factory);
+    return getLoggerRepository().getLogger(name, factory);
   }  
 
   public
   static
-  Logger exists(String name) {
-    return repositorySelector.getLoggerRepository().exists(name);
+  Logger exists(final String name) {
+    return getLoggerRepository().exists(name);
   }
 
   public
   static
   Enumeration getCurrentLoggers() {
-    return repositorySelector.getLoggerRepository().getCurrentLoggers();
+    return getLoggerRepository().getCurrentLoggers();
   }
 
   public
   static
   void shutdown() {
-    repositorySelector.getLoggerRepository().shutdown();
+    getLoggerRepository().shutdown();
   }
 
   public
   static
   void resetConfiguration() {
-    repositorySelector.getLoggerRepository().resetConfiguration();
+    getLoggerRepository().resetConfiguration();
   }
 }
 

Added: logging/log4j/trunk/src/main/java/org/apache/log4j/spi/NOPLogger.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/spi/NOPLogger.java?rev=569127&view=auto
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/spi/NOPLogger.java 
(added)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/spi/NOPLogger.java Thu 
Aug 23 12:38:38 2007
@@ -0,0 +1,201 @@
+package org.apache.log4j.spi;
+
+import org.apache.log4j.Logger;
+import org.apache.log4j.Appender;
+import org.apache.log4j.Level;
+import org.apache.log4j.LogManager;
+import org.apache.log4j.Priority;
+import org.apache.log4j.Hierarchy;
+import org.apache.log4j.helpers.AppenderAttachableImpl;
+import org.apache.log4j.helpers.NullEnumeration;
+
+import java.util.Enumeration;
+import java.util.ResourceBundle;
+import java.util.MissingResourceException;
+import java.util.Vector;
+
+/**
+ * No-operation implementation of Logger used by NOPLoggerRepository.
+ * @since 1.2.15
+ */
+public class NOPLogger extends Logger {
+    /**
+     * Create instance of Logger.
+     * @param repo repository, may not be null.
+     * @param name name, may not be null, use "root" for root logger.
+     */
+    public NOPLogger(NOPLoggerRepository repo, final String name) {
+        super(name);
+        this.repository = repo;
+        this.level = Level.OFF;
+        this.parent = this;
+    }
+
+    /** [EMAIL PROTECTED] */
+    public void addAppender(final Appender newAppender) {
+    }
+
+    /** [EMAIL PROTECTED] */
+    public void assertLog(final boolean assertion, final String msg) {
+    }
+
+
+    /** [EMAIL PROTECTED] */
+    public void callAppenders(final LoggingEvent event) {
+    }
+
+    /** [EMAIL PROTECTED] */
+    void closeNestedAppenders() {
+    }
+
+    /** [EMAIL PROTECTED] */
+    public void debug(final Object message) {
+    }
+
+
+    /** [EMAIL PROTECTED] */
+    public void debug(final Object message, final Throwable t) {
+    }
+
+    /** [EMAIL PROTECTED] */
+    public void error(final Object message) {
+    }
+
+    /** [EMAIL PROTECTED] */
+    public void error(final Object message, final Throwable t) {
+    }
+
+
+    /** [EMAIL PROTECTED] */
+    public void fatal(final Object message) {
+    }
+
+    /** [EMAIL PROTECTED] */
+    public void fatal(final Object message, final Throwable t) {
+    }
+
+
+    /** [EMAIL PROTECTED] */
+    public Enumeration getAllAppenders() {
+      return new Vector().elements();
+    }
+
+    /** [EMAIL PROTECTED] */
+    public Appender getAppender(final String name) {
+       return null;
+    }
+
+    /** [EMAIL PROTECTED] */
+    public Level getEffectiveLevel() {
+      return Level.OFF;
+    }
+
+    /** [EMAIL PROTECTED] */
+    public Priority getChainedPriority() {
+      return getEffectiveLevel();
+    }
+
+    /** [EMAIL PROTECTED] */
+    public ResourceBundle getResourceBundle() {
+      return null;
+    }
+
+
+    /** [EMAIL PROTECTED] */
+    public void info(final Object message) {
+    }
+
+    /** [EMAIL PROTECTED] */
+    public void info(final Object message, final Throwable t) {
+    }
+
+    /** [EMAIL PROTECTED] */
+    public boolean isAttached(Appender appender) {
+      return false;
+    }
+
+    /** [EMAIL PROTECTED] */
+    public boolean isDebugEnabled() {
+      return false;
+    }
+
+    /** [EMAIL PROTECTED] */
+    public boolean isEnabledFor(final Priority level) {
+      return false;
+    }
+
+    /** [EMAIL PROTECTED] */
+    public boolean isInfoEnabled() {
+      return false;
+    }
+
+
+    /** [EMAIL PROTECTED] */
+    public void l7dlog(final Priority priority, final String key, final 
Throwable t) {
+    }
+
+    /** [EMAIL PROTECTED] */
+    public void l7dlog(final Priority priority, final String key,  final 
Object[] params, final Throwable t) {
+    }
+
+    /** [EMAIL PROTECTED] */
+    public void log(final Priority priority, final Object message, final 
Throwable t) {
+    }
+
+    /** [EMAIL PROTECTED] */
+    public void log(final Priority priority, final Object message) {
+    }
+
+    /** [EMAIL PROTECTED] */
+    public void log(final String callerFQCN, final Priority level, final 
Object message, final Throwable t) {
+    }
+
+    /** [EMAIL PROTECTED] */
+    public void removeAllAppenders() {
+    }
+
+
+    /** [EMAIL PROTECTED] */
+    public void removeAppender(Appender appender) {
+    }
+
+    /** [EMAIL PROTECTED] */
+    public void removeAppender(final String name) {
+    }
+
+    /** [EMAIL PROTECTED] */
+    public void setLevel(final Level level) {
+    }
+
+
+    /** [EMAIL PROTECTED] */
+    public void setPriority(final Priority priority) {
+    }
+
+    /** [EMAIL PROTECTED] */
+    public void setResourceBundle(final ResourceBundle bundle) {
+    }
+
+    /** [EMAIL PROTECTED] */
+    public void warn(final Object message) {
+    }
+
+    /** [EMAIL PROTECTED] */
+    public void warn(final Object message, final Throwable t) {
+    }
+
+    /** [EMAIL PROTECTED] */
+    public void trace(Object message) {
+    }
+
+    /** [EMAIL PROTECTED] */
+    public void trace(Object message, Throwable t) {
+    }
+
+    /** [EMAIL PROTECTED] */
+    public boolean isTraceEnabled() {
+        return false;
+    }
+
+
+}

Added: 
logging/log4j/trunk/src/main/java/org/apache/log4j/spi/NOPLoggerRepository.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/spi/NOPLoggerRepository.java?rev=569127&view=auto
==============================================================================
--- 
logging/log4j/trunk/src/main/java/org/apache/log4j/spi/NOPLoggerRepository.java 
(added)
+++ 
logging/log4j/trunk/src/main/java/org/apache/log4j/spi/NOPLoggerRepository.java 
Thu Aug 23 12:38:38 2007
@@ -0,0 +1,115 @@
+package org.apache.log4j.spi;
+
+import org.apache.log4j.Level;
+import org.apache.log4j.Category;
+import org.apache.log4j.Logger;
+import org.apache.log4j.Appender;
+
+import java.util.Enumeration;
+import java.util.Vector;
+
+/**
+ *  No-operation implementation of LoggerRepository which is used when
+ *  LogManager.repositorySelector is erroneously nulled during class reloading.
+ *  @since 1.2.15
+ */
+public final class NOPLoggerRepository implements LoggerRepository {
+    /**
+     * [EMAIL PROTECTED]
+    */
+    public void addHierarchyEventListener(final HierarchyEventListener 
listener) {
+    }
+
+    /**
+     * [EMAIL PROTECTED]
+     */
+    public boolean isDisabled(final int level) {
+        return true;
+    }
+
+    /**
+     * [EMAIL PROTECTED]
+     */
+    public void setThreshold(final Level level) {
+    }
+
+    /**
+     * [EMAIL PROTECTED]
+     */
+    public void setThreshold(final String val) {
+    }
+
+    /**
+     * [EMAIL PROTECTED]
+     */
+    public void emitNoAppenderWarning(final Category cat) {
+    }
+
+    /**
+     * @{inheritDoc}
+     */
+    public Level getThreshold() {
+        return Level.OFF;
+    }
+
+    /**
+     * [EMAIL PROTECTED]
+     */
+    public Logger getLogger(final String name) {
+        return new NOPLogger(this, name);
+    }
+
+    /**
+     * [EMAIL PROTECTED]
+     */
+    public Logger getLogger(final String name, final LoggerFactory factory) {
+        return new NOPLogger(this, name);
+    }
+
+    /**
+     * [EMAIL PROTECTED]
+     */
+    public Logger getRootLogger() {
+        return new NOPLogger(this, "root");
+    }
+
+    /**
+     * [EMAIL PROTECTED]
+     */
+    public Logger exists(final String name) {
+        return null;
+    }
+
+    /**
+     * [EMAIL PROTECTED]
+     */
+    public void shutdown() {
+    }
+
+    /**
+     * [EMAIL PROTECTED]
+     */
+    public Enumeration getCurrentLoggers() {
+        return new Vector().elements();
+    }
+
+    /**
+     * [EMAIL PROTECTED]
+     */
+    public Enumeration getCurrentCategories() {
+        return getCurrentLoggers();
+    }
+
+
+    /**
+     * [EMAIL PROTECTED]
+     */
+    public  void fireAddAppenderEvent(Category logger, Appender appender) {
+    }
+
+    /**
+     * [EMAIL PROTECTED]
+     */
+    public void resetConfiguration() {
+    }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to