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]