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 ca...@apache.org on 2007/04/19 17:45:43 UTC
svn commit: r530462 -
/logging/log4j/trunk/src/java/org/apache/log4j/Hierarchy.java
Author: carnold
Date: Thu Apr 19 08:45:34 2007
New Revision: 530462
URL: http://svn.apache.org/viewvc?view=rev&rev=530462
Log:
Bug 42092: Checkstyle fixes for component companion
Modified:
logging/log4j/trunk/src/java/org/apache/log4j/Hierarchy.java
Modified: logging/log4j/trunk/src/java/org/apache/log4j/Hierarchy.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/java/org/apache/log4j/Hierarchy.java?view=diff&rev=530462&r1=530461&r2=530462
==============================================================================
--- logging/log4j/trunk/src/java/org/apache/log4j/Hierarchy.java (original)
+++ logging/log4j/trunk/src/java/org/apache/log4j/Hierarchy.java Thu Apr 19 08:45:34 2007
@@ -1,9 +1,10 @@
/*
- * Copyright 1999,2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -33,6 +34,8 @@
import org.apache.log4j.spi.LoggerRepositoryEventListener;
import org.apache.log4j.spi.RendererSupport;
import org.apache.log4j.spi.RootLogger;
+import org.apache.log4j.spi.HierarchyEventListener;
+import org.apache.log4j.spi.HierarchyEventListenerAdapter;
import java.util.ArrayList;
import java.util.Enumeration;
@@ -72,43 +75,92 @@
*/
public class Hierarchy implements LoggerRepositoryEx, RendererSupport {
-
+
+ /**
+ * Logger factory.
+ */
private LoggerFactory loggerFactory;
+ /**
+ * List of repository event listeners.
+ */
private final ArrayList repositoryEventListeners;
+ /**
+ * List of logger event listeners.
+ */
private final ArrayList loggerEventListeners;
+ /**
+ * Name of hierarchy.
+ */
String name;
+ /**
+ * Loggers by name.
+ */
Hashtable ht;
+ /**
+ * Root logger.
+ */
Logger root;
+ /**
+ * Map of ObjectRenderer by Class.
+ */
RendererMap rendererMap;
+ /**
+ * Numeric value for threshold.
+ */
int thresholdInt;
+ /**
+ * Threshold.
+ */
Level threshold;
+ /**
+ * Plug in registry.
+ */
PluginRegistry pluginRegistry;
+ /**
+ * Properties.
+ */
Map properties;
+ /**
+ * Scheduler.
+ */
private Scheduler scheduler;
- // The repository can also be used as an object store for various objects used
- // by log4j components
+ /** The repository can also be used as an object store
+ * for various objects used by log4j components.
+ */
private Map objectMap;
- // the internal logger used by this instance of Hierarchy for its own reporting
+ /**
+ * The internal logger used by this instance of
+ * Hierarchy for its own reporting.
+ */
private Logger myLogger;
+ /**
+ * Error list.
+ */
private List errorList = new Vector();
+ /**
+ * True if no appender warning has already been issued.
+ */
boolean emittedNoAppenderWarning = false;
+ /**
+ * True if hierarchy has not been modified.
+ */
boolean pristine = true;
/**
Constructs a new logger hierarchy.
- @param root The root of the new hierarchy.
+ @param rootLogger The root of the new hierarchy.
*/
- public Hierarchy(Logger root) {
+ public Hierarchy(final Logger rootLogger) {
ht = new Hashtable();
repositoryEventListeners = new ArrayList(1);
loggerEventListeners = new ArrayList(1);
- this.root = root;
+ this.root = rootLogger;
this.objectMap = new HashMap();
// Enable all level levels by default.
setThreshold(Level.ALL);
@@ -128,29 +180,38 @@
/**
Add an object renderer for a specific class.
+ @param classToRender class to render
+ @param or renderer
*/
- public void addRenderer(Class classToRender, ObjectRenderer or) {
+ public void addRenderer(final Class classToRender,
+ final ObjectRenderer or) {
rendererMap.put(classToRender, or);
}
/**
Add a {@link LoggerRepositoryEventListener} to the repository. The
listener will be called when repository events occur.
+ @param listener listener
@since 1.3*/
public void addLoggerRepositoryEventListener(
- LoggerRepositoryEventListener listener) {
+ final LoggerRepositoryEventListener listener) {
synchronized (repositoryEventListeners) {
if (repositoryEventListeners.contains(listener)) {
getMyLogger().warn(
- "Ignoring attempt to add a previously registered LoggerRepositoryEventListener.");
+ "Ignoring attempt to add a previously "
+ + "registered LoggerRepositoryEventListener.");
} else {
repositoryEventListeners.add(listener);
}
}
}
+ /**
+ * Gets logger to be used for internal diagnostic messages.
+ * @return logger
+ */
private Logger getMyLogger() {
- if(myLogger == null) {
+ if (myLogger == null) {
myLogger = getLogger(this.getClass().getName());
}
return myLogger;
@@ -158,13 +219,15 @@
/**
Remove a {@link LoggerRepositoryEventListener} from the repository.
+ @param listener listener
@since 1.3*/
public void removeLoggerRepositoryEventListener(
- LoggerRepositoryEventListener listener) {
+ final LoggerRepositoryEventListener listener) {
synchronized (repositoryEventListeners) {
if (!repositoryEventListeners.contains(listener)) {
getMyLogger().warn(
- "Ignoring attempt to remove a non-registered LoggerRepositoryEventListener.");
+ "Ignoring attempt to remove a "
+ + "non-registered LoggerRepositoryEventListener.");
} else {
repositoryEventListeners.remove(listener);
}
@@ -174,12 +237,14 @@
/**
Add a {@link LoggerEventListener} to the repository. The listener
will be called when repository events occur.
- @since 1.3*/
- public void addLoggerEventListener(LoggerEventListener listener) {
+ @param listener listener
+ @since 1.3
+ */
+ public void addLoggerEventListener(final LoggerEventListener listener) {
synchronized (loggerEventListeners) {
if (loggerEventListeners.contains(listener)) {
getMyLogger().warn(
- "Ignoring attempt to add a previously registerd LoggerEventListener.");
+ "Ignoring attempt to add a previously registerd LoggerEventListener.");
} else {
loggerEventListeners.add(listener);
}
@@ -187,19 +252,22 @@
}
/**
- Add a {@link org.apache.log4j.spi.HierarchyEventListener} event to the repository.
+ Add a {@link org.apache.log4j.spi.HierarchyEventListener}
+ event to the repository.
+ @param listener listener
@deprecated Superceded by addLoggerEventListener
*/
public
- void addHierarchyEventListener(final org.apache.log4j.spi.HierarchyEventListener listener) {
- addLoggerEventListener(new org.apache.log4j.spi.HierarchyEventListenerAdapter(listener));
+ void addHierarchyEventListener(final HierarchyEventListener listener) {
+ addLoggerEventListener(new HierarchyEventListenerAdapter(listener));
}
/**
Remove a {@link LoggerEventListener} from the repository.
+ @param listener listener to be removed
@since 1.3*/
- public void removeLoggerEventListener(LoggerEventListener listener) {
+ public void removeLoggerEventListener(final LoggerEventListener listener) {
synchronized (loggerEventListeners) {
if (!loggerEventListeners.contains(listener)) {
getMyLogger().warn(
@@ -224,7 +292,11 @@
ht.clear();
}
- public void emitNoAppenderWarning(Category cat) {
+ /**
+ * Issue warning that there are no appenders in hierarchy.
+ * @param cat logger, not currently used.
+ */
+ public void emitNoAppenderWarning(final Category cat) {
// No appenders in hierarchy, warn user only once.
if (!this.emittedNoAppenderWarning) {
//LogLog.warn(
@@ -238,10 +310,11 @@
Check if the named logger exists in the hierarchy. If so return
its reference, otherwise returns <code>null</code>.
- @param name The name of the logger to search for.
+ @param loggerName The name of the logger to search for.
+ @return true if logger exists.
*/
- public Logger exists(String name) {
- Object o = ht.get(new CategoryKey(name));
+ public Logger exists(final String loggerName) {
+ Object o = ht.get(new CategoryKey(loggerName));
if (o instanceof Logger) {
return (Logger) o;
@@ -252,18 +325,20 @@
/**
* Return the name of this hierarchy.
+ * @return name of hierarchy
*/
public String getName() {
return name;
}
- /*
+ /**
* Set the name of this repository.
*
* Note that once named, a repository cannot be rerenamed.
* @since 1.3
+ * @param repoName name of hierarchy
*/
- public void setName(String repoName) {
+ public void setName(final String repoName) {
if (name == null) {
name = repoName;
} else if (!name.equals(repoName)) {
@@ -272,36 +347,36 @@
}
}
- /*
- * Get the properties for this repository.
- *
- * @see org.apache.log4j.spi.LoggerRepository#getProperties()
- *
+ /**
+ * {@inheritDoc}
*/
public Map getProperties() {
return properties;
}
- /*
- * Get a property of this repository.
- * @see org.apache.log4j.spi.LoggerRepository#getProperty(java.lang.String)
+ /**
+ * {@inheritDoc}
*/
- public String getProperty(String key) {
+ public String getProperty(final String key) {
return (String) properties.get(key);
}
- /*
+ /**
* Set a property by key and value. The property will be shared by all
* events in this repository.
+ * @param key property name
+ * @param value property value
*/
- public void setProperty(String key, String value) {
+ public void setProperty(final String key,
+ final String value) {
properties.put(key, value);
}
/**
The string form of {@link #setThreshold(Level)}.
+ @param levelStr symbolic name for level
*/
- public void setThreshold(String levelStr) {
+ public void setThreshold(final String levelStr) {
Level l = Level.toLevel(levelStr, null);
if (l != null) {
@@ -317,18 +392,19 @@
@param l The minimum level for which logging requests are sent to
their appenders. */
- public void setThreshold(Level l) {
+ public void setThreshold(final Level l) {
if (l != null) {
thresholdInt = l.level;
threshold = l;
}
}
- /* (non-Javadoc)
+ /**
+ * {@inheritDoc}
* @since 1.3
*/
public PluginRegistry getPluginRegistry() {
- if(pluginRegistry == null) {
+ if (pluginRegistry == null) {
pluginRegistry = new PluginRegistry(this);
}
return pluginRegistry;
@@ -341,7 +417,8 @@
@param logger The logger to which the appender was added.
@param appender The appender added to the logger.
*/
- public void fireAddAppenderEvent(final Category logger, Appender appender) {
+ public void fireAddAppenderEvent(final Category logger,
+ final Appender appender) {
if (logger instanceof Logger) {
fireAddAppenderEvent((Logger) logger, appender);
}
@@ -354,12 +431,14 @@
@param appender The appender added to the logger.
@since 1.3
*/
- public void fireAddAppenderEvent(final Logger logger, Appender appender) {
+ public void fireAddAppenderEvent(final Logger logger,
+ final Appender appender) {
ArrayList list = copyListenerList(loggerEventListeners);
int size = list.size();
for (int i = 0; i < size; i++) {
- ((LoggerEventListener) list.get(i)).appenderAddedEvent(logger, appender);
+ ((LoggerEventListener) list.get(i)).
+ appenderAddedEvent(logger, appender);
}
}
@@ -370,7 +449,8 @@
@param logger The logger from which the appender was removed.
@param appender The appender removed from the logger.
*/
- public void fireRemoveAppenderEvent(Category logger, Appender appender) {
+ public void fireRemoveAppenderEvent(final Category logger,
+ final Appender appender) {
if (logger instanceof Logger) {
fireRemoveAppenderEvent((Logger) logger, appender);
}
@@ -382,7 +462,8 @@
@param logger The logger from which the appender was removed.
@param appender The appender removed from the logger.
@since 1.3*/
- public void fireRemoveAppenderEvent(Logger logger, Appender appender) {
+ public void fireRemoveAppenderEvent(final Logger logger,
+ final Appender appender) {
ArrayList list = copyListenerList(loggerEventListeners);
int size = list.size();
@@ -397,7 +478,7 @@
{@link LoggerEventListener}.
@param logger The logger which changed levels.
@since 1.3*/
- public void fireLevelChangedEvent(Logger logger) {
+ public void fireLevelChangedEvent(final Logger logger) {
ArrayList list = copyListenerList(loggerEventListeners);
int size = list.size();
@@ -421,8 +502,11 @@
}
/**
- Returns a copy of the given listener vector. */
- private ArrayList copyListenerList(ArrayList list) {
+ Returns a copy of the given listener vector.
+ @param list original list
+ @return copy of list
+ */
+ private ArrayList copyListenerList(final ArrayList list) {
ArrayList listCopy = null;
synchronized (list) {
@@ -440,6 +524,7 @@
/**
Returns a {@link Level} representation of the <code>enable</code>
state.
+ @return current threshold level
@since 1.2 */
public Level getThreshold() {
@@ -466,11 +551,12 @@
returned. Otherwise, a new logger will be instantiated and
then linked with its existing ancestors as well as children.
- @param name The name of the logger to retrieve.
+ @param loggerName The name of the logger to retrieve.
+ @return logger
*/
- public Logger getLogger(String name) {
- return getLogger(name, loggerFactory);
+ public Logger getLogger(final String loggerName) {
+ return getLogger(loggerName, loggerFactory);
}
/**
@@ -482,13 +568,15 @@
<code>factory</code> parameter and linked with its existing
ancestors as well as children.
- @param name The name of the logger to retrieve.
+ @param loggerName The name of the logger to retrieve.
@param factory The factory that will make the new logger instance.
+ @return logger
*/
- public Logger getLogger(String name, LoggerFactory factory) {
+ public Logger getLogger(final String loggerName,
+ final LoggerFactory factory) {
//System.out.println("getInstance("+name+") called.");
- CategoryKey key = new CategoryKey(name);
+ CategoryKey key = new CategoryKey(loggerName);
// Synchronize to prevent write conflicts. Read conflicts (in
@@ -501,8 +589,9 @@
if (o == null) {
LogLog.debug(
- "Creating new logger ["+name+"] in repository ["+getName()+"].");
- logger = factory.makeNewLoggerInstance(name);
+ "Creating new logger [" + loggerName
+ + "] in repository [" + getName() + "].");
+ logger = factory.makeNewLoggerInstance(loggerName);
logger.setHierarchy(this);
ht.put(key, logger);
updateParents(logger);
@@ -510,11 +599,12 @@
return logger;
} else if (o instanceof Logger) {
LogLog.debug(
- "Returning existing logger ["+name+"] in repository ["+getName()+"].");
+ "Returning existing logger [" + loggerName
+ + "] in repository [" + getName() + "].");
return (Logger) o;
} else if (o instanceof ProvisionNode) {
//System.out.println("("+name+") ht.get(this) returned ProvisionNode");
- logger = factory.makeNewLoggerInstance(name);
+ logger = factory.makeNewLoggerInstance(loggerName);
logger.setHierarchy(this);
ht.put(key, logger);
updateChildren((ProvisionNode) o, logger);
@@ -533,7 +623,9 @@
an {@link java.util.Enumeration Enumeration}.
<p>The root logger is <em>not</em> included in the returned
- {@link Enumeration}. */
+ {@link Enumeration}.
+ @return enumerator of current loggers
+ */
public Enumeration getCurrentLoggers() {
// The accumlation in v is necessary because not all elements in
// ht are Logger objects as there might be some ProvisionNodes
@@ -555,6 +647,7 @@
/**
* Return the the list of previously encoutered {@link ErrorItem error items}.
+ * @return list of errors
*/
public List getErrorList() {
return errorList;
@@ -562,13 +655,16 @@
/**
* Add an error item to the list of previously encountered errors.
+ * @param errorItem error to add to list of errors.
* @since 1.3
*/
- public void addErrorItem(ErrorItem errorItem) {
+ public void addErrorItem(final ErrorItem errorItem) {
getErrorList().add(errorItem);
}
/**
+ * Get enumerator over current loggers.
+ * @return enumerator over current loggers
@deprecated Please use {@link #getCurrentLoggers} instead.
*/
public Enumeration getCurrentCategories() {
@@ -577,6 +673,7 @@
/**
Get the renderer map for this hierarchy.
+ @return renderer map
*/
public RendererMap getRendererMap() {
return rendererMap;
@@ -586,6 +683,7 @@
Get the root of this hierarchy.
@since 0.9.0
+ @return root of hierarchy
*/
public Logger getRootLogger() {
return root;
@@ -593,10 +691,13 @@
/**
This method will return <code>true</code> if this repository is
- disabled for <code>level</code> object passed as parameter and
+ disabled for <code>level</code> value passed as parameter and
<code>false</code> otherwise. See also the {@link
- #setThreshold(Level) threshold} emthod. */
- public boolean isDisabled(int level) {
+ #setThreshold(Level) threshold} method.
+ @param level numeric value for level.
+ @return true if disabled for specified level
+ */
+ public boolean isDisabled(final int level) {
return thresholdInt > level;
}
@@ -649,22 +750,25 @@
/**
Used by subclasses to add a renderer to the hierarchy passed as parameter.
+ @param renderedClass class
+ @param renderer object used to render class.
*/
- public void setRenderer(Class renderedClass, ObjectRenderer renderer) {
+ public void setRenderer(final Class renderedClass,
+ final ObjectRenderer renderer) {
rendererMap.put(renderedClass, renderer);
}
- /*
- * @see org.apache.log4j.spi.LoggerRepository#isPristine()
+ /**
+ * {@inheritDoc}
*/
public boolean isPristine() {
return pristine;
}
- /*
- * @see org.apache.log4j.spi.LoggerRepository#setPristine()
+ /**
+ * {@inheritDoc}
*/
- public void setPristine(boolean state) {
+ public void setPristine(final boolean state) {
pristine = state;
}
@@ -687,10 +791,14 @@
shutdown(false);
}
- private void shutdown(boolean doingReset) {
+ /**
+ * Shutdown hierarchy.
+ * @param doingReset true is resetting hierarchy
+ */
+ private void shutdown(final boolean doingReset) {
// stop this repo's scheduler if it has one
- if(scheduler != null) {
+ if (scheduler != null) {
scheduler.shutdown();
scheduler = null;
}
@@ -706,10 +814,10 @@
}
}
- Logger root = getRootLogger();
+ Logger rootLogger = getRootLogger();
// begin by closing nested appenders
- root.closeNestedAppenders();
+ rootLogger.closeNestedAppenders();
synchronized (ht) {
Enumeration cats = this.getCurrentLoggers();
@@ -720,7 +828,7 @@
}
// then, remove all appenders
- root.removeAllAppenders();
+ rootLogger.removeAllAppenders();
cats = this.getCurrentLoggers();
while (cats.hasMoreElements()) {
@@ -752,19 +860,21 @@
3) There entry is of type ProvisionNode for this potential parent.
We add 'cat' to the list of children for this potential parent.
+ @param cat logger whose parents are updated
*/
- private final void updateParents(Logger cat) {
- String name = cat.name;
- int length = name.length();
+ private void updateParents(final Logger cat) {
+ String loggerName = cat.name;
+ int length = loggerName.length();
boolean parentFound = false;
//System.out.println("UpdateParents called for " + name);
- // if name = "w.x.y.z", loop thourgh "w.x.y", "w.x" and "w", but not "w.x.y.z"
+ // if name = "w.x.y.z",
+ // loop through "w.x.y", "w.x" and "w", but not "w.x.y.z"
for (
- int i = name.lastIndexOf('.', length - 1); i >= 0;
- i = name.lastIndexOf('.', i - 1)) {
- String substr = name.substring(0, i);
+ int i = loggerName.lastIndexOf('.', length - 1); i >= 0;
+ i = loggerName.lastIndexOf('.', i - 1)) {
+ String substr = loggerName.substring(0, i);
//System.out.println("Updating parent : " + substr);
CategoryKey key = new CategoryKey(substr); // simple constructor
@@ -772,14 +882,14 @@
// Create a provision node for a future parent.
if (o == null) {
- //System.out.println("No parent "+substr+" found. Creating ProvisionNode.");
+ //System.out.println("No parent "+substr+" found. Creating ProvisionNode.");
ProvisionNode pn = new ProvisionNode(cat);
ht.put(key, pn);
} else if (o instanceof Logger) {
parentFound = true;
cat.parent = (Logger) o;
- //System.out.println("Linking " + cat.name + " -> " + ((Category) o).name);
+ //System.out.println("Linking " + cat.name + " -> " + ((Logger) o).name);
break; // no need to update the ancestors of the closest ancestor
} else if (o instanceof ProvisionNode) {
((ProvisionNode) o).addElement(cat);
@@ -810,9 +920,12 @@
Otherwise, we set cat's parent field to c's parent and set
c's parent field to cat.
+ @param pn provisional node
+ @param logger parent logger
*/
- private final void updateChildren(ProvisionNode pn, Logger logger) {
+ private void updateChildren(final ProvisionNode pn,
+ final Logger logger) {
//System.out.println("updateChildren called for " + logger.name);
final int last = pn.size();
@@ -830,34 +943,55 @@
}
}
/**
- * Return this repository's own scheduler. The scheduler is lazily instantiated.
+ * Return this repository's own scheduler.
+ * The scheduler is lazily instantiated.
* @return this repository's own scheduler.
*/
public Scheduler getScheduler() {
- if(scheduler == null) {
+ if (scheduler == null) {
scheduler = new Scheduler();
scheduler.setDaemon(true);
scheduler.start();
}
return scheduler;
}
-
- public void putObject(String key, Object value) {
+
+ /**
+ * Puts object by key.
+ * @param key key, may not be null.
+ * @param value object to associate with key.
+ */
+ public void putObject(final String key,
+ final Object value) {
objectMap.put(key, value);
}
-
- public Object getObject(String key) {
+
+ /**
+ * Get object by key.
+ * @param key key, may not be null.
+ * @return object associated with key or null.
+ */
+ public Object getObject(final String key) {
return objectMap.get(key);
}
-
- public void setLoggerFactory(LoggerFactory loggerFactory) {
- if (loggerFactory == null)
+
+ /**
+ * Set logger factory.
+ * @param factory logger factory.
+ */
+ public void setLoggerFactory(final LoggerFactory factory) {
+ if (factory == null) {
throw new NullPointerException();
- this.loggerFactory = loggerFactory;
+ }
+ this.loggerFactory = factory;
}
+ /**
+ * Get logger factory.
+ * @return logger factory.
+ */
public LoggerFactory getLoggerFactory() {
return loggerFactory;
- }
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org