cvs commit: jakarta-log4j/src/java/org/apache/log4j Hierarchy.java
mwomack 2002/12/11 21:20:22 Modified:src/java/org/apache/log4j Hierarchy.java Log: Switched listener lists from Vector to ArrayList to avoid some unneeded synchronization charges. Thread safety changes. Added synchronization for listener lists when adding/removing and copying when reporting events. Revision ChangesPath 1.44 +71 -71jakarta-log4j/src/java/org/apache/log4j/Hierarchy.java Index: Hierarchy.java === RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/Hierarchy.java,v retrieving revision 1.43 retrieving revision 1.44 diff -u -r1.43 -r1.44 --- Hierarchy.java22 Nov 2002 11:03:28 - 1.43 +++ Hierarchy.java12 Dec 2002 05:20:22 - 1.44 @@ -15,6 +15,7 @@ import java.util.Hashtable; import java.util.Enumeration; import java.util.Vector; +import java.util.ArrayList; import org.apache.log4j.spi.LoggerFactory; import org.apache.log4j.spi.HierarchyEventListener; @@ -57,8 +58,8 @@ public class Hierarchy implements LoggerRepository, RendererSupport { private LoggerFactory defaultFactory; - private Vector repositoryEventListeners; - private Vector loggerEventListeners; + private ArrayList repositoryEventListeners; + private ArrayList loggerEventListeners; Hashtable ht; Logger root; @@ -79,8 +80,8 @@ public Hierarchy(Logger root) { ht = new Hashtable(); -repositoryEventListeners = new Vector(1); -loggerEventListeners = new Vector(1); +repositoryEventListeners = new ArrayList(1); +loggerEventListeners = new ArrayList(1); this.root = root; // Enable all level levels by default. setThreshold(Level.ALL); @@ -102,12 +103,14 @@ @since 1.3*/ public void addLoggerRepositoryEventListener( LoggerRepositoryEventListener listener) { - -if(repositoryEventListeners.contains(listener)) { - LogLog.warn( -"Ignoring attempt to add a previously registerd LoggerRepositoryEventListener."); -} else { - repositoryEventListeners.addElement(listener); + +synchronized(repositoryEventListeners) { + if(repositoryEventListeners.contains(listener)) { +LogLog.warn( + "Ignoring attempt to add a previously registerd LoggerRepositoryEventListener."); + } else { +repositoryEventListeners.add(listener); + } } } @@ -117,11 +120,13 @@ public void removeLoggerRepositoryEventListener( LoggerRepositoryEventListener listener) { -if(!repositoryEventListeners.contains(listener)) { - LogLog.warn( -"Ignoring attempt to remove a non-registered LoggerRepositoryEventListener."); -} else { - repositoryEventListeners.remove(listener); +synchronized(repositoryEventListeners) { + if(!repositoryEventListeners.contains(listener)) { +LogLog.warn( + "Ignoring attempt to remove a non-registered LoggerRepositoryEventListener."); + } else { +repositoryEventListeners.remove(listener); + } } } @@ -130,11 +135,13 @@ will be called when repository events occur. @since 1.3*/ public void addLoggerEventListener(LoggerEventListener listener) { -if(loggerEventListeners.contains(listener)) { - LogLog.warn( -"Ignoring attempt to add a previously registerd LoggerEventListener."); -} else { - loggerEventListeners.addElement(listener); +synchronized(loggerEventListeners) { + if(loggerEventListeners.contains(listener)) { +LogLog.warn( + "Ignoring attempt to add a previously registerd LoggerEventListener."); + } else { +loggerEventListeners.add(listener); + } } } @@ -142,12 +149,13 @@ Remove a {@link LoggerEventListener} from the repository. @since 1.3*/ public void removeLoggerEventListener(LoggerEventListener listener) { - -if(!loggerEventListeners.contains(listener)) { - LogLog.warn( -"Ignoring attempt to remove a non-registered LoggerEventListener."); -} else { - loggerEventListeners.remove(listener); +synchronized(loggerEventListeners) { + if(!loggerEventListeners.contains(listener)) { +LogLog.warn( + "Ignoring attempt to remove a non-registered LoggerEventListener."); + } else { +loggerEventListeners.remove(listener); + } } } @@ -223,13 +231,10 @@ @param appender The appender added to the logger. @since 1.3*/ public void fireAddAppenderEvent(Logger logger, Appender appender) { -if(loggerEventListeners != null) { - int size = loggerEventListeners.size(); - LoggerEventListener listener; - for(int i = 0; i < siz
cvs commit: jakarta-log4j/src/java/org/apache/log4j Hierarchy.java
mwomack 2002/11/21 20:51:39 Modified:src/java/org/apache/log4j Hierarchy.java Log: Updated to match changes in LoggerRepository interface. Implemented callbacks to LoggerRepositoryEventListener and LoggerEventListener instances.. Revision ChangesPath 1.41 +205 -26 jakarta-log4j/src/java/org/apache/log4j/Hierarchy.java Index: Hierarchy.java === RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/Hierarchy.java,v retrieving revision 1.40 retrieving revision 1.41 diff -u -r1.40 -r1.41 --- Hierarchy.java9 May 2002 15:43:43 - 1.40 +++ Hierarchy.java22 Nov 2002 04:51:39 - 1.41 @@ -9,12 +9,6 @@ // WARNING RootCategory classes in its static initiliazation neither // WARNING directly nor indirectly. -// Contributors: -//Luke Blanshard <[EMAIL PROTECTED]> -//Mario Schomburg - IBM Global Services/Germany -//Anders Kristensen -//Igor Poteryaev - package org.apache.log4j; @@ -24,6 +18,8 @@ import org.apache.log4j.spi.LoggerFactory; import org.apache.log4j.spi.HierarchyEventListener; +import org.apache.log4j.spi.LoggerEventListener; +import org.apache.log4j.spi.LoggerRepositoryEventListener; import org.apache.log4j.spi.LoggerRepository; import org.apache.log4j.spi.RendererSupport; import org.apache.log4j.Appender; @@ -49,6 +45,12 @@ to the provision node. Other descendants of the same ancestor add themselves to the previously created provision node. + Contributors: +Luke Blanshard <[EMAIL PROTECTED]> +Mario Schomburg - IBM Global Services/Germany +Anders Kristensen +Igor Poteryaev + @author Ceki Gülcü */ @@ -56,6 +58,8 @@ private LoggerFactory defaultFactory; private Vector listeners; + private Vector repositoryEventListeners; + private Vector loggerEventListeners; Hashtable ht; Logger root; @@ -77,6 +81,8 @@ Hierarchy(Logger root) { ht = new Hashtable(); listeners = new Vector(1); +repositoryEventListeners = new Vector(1); +loggerEventListeners = new Vector(1); this.root = root; // Enable all level levels by default. setThreshold(Level.ALL); @@ -93,6 +99,9 @@ rendererMap.put(classToRender, or); } + /** + @deprecated As of v1.3, use {@link #addLoggerRepositoryEventListener} + and {@link addLoggerEventListener} methods instead. */ public void addHierarchyEventListener(HierarchyEventListener listener) { if(listeners.contains(listener)) { @@ -101,6 +110,61 @@ listeners.addElement(listener); } } + + /** +Add a {@link LoggerRepositoryEventListener} to the repository. The +listener will be called when repository events occur. +@since 1.3*/ + public void addLoggerRepositoryEventListener( +LoggerRepositoryEventListener listener) { + +if(repositoryEventListeners.contains(listener)) { + LogLog.warn( +"Ignoring attempt to add a previously registerd LoggerRepositoryEventListener."); +} else { + repositoryEventListeners.addElement(listener); +} + } + + /** +Remove a {@link LoggerRepositoryEventListener} from the repository. +@since 1.3*/ + public void removeLoggerRepositoryEventListener( +LoggerRepositoryEventListener listener) { + +if(!repositoryEventListeners.contains(listener)) { + LogLog.warn( +"Ignoring attempt to remove a non-registered LoggerRepositoryEventListener."); +} else { + repositoryEventListeners.remove(listener); +} + } + + /** +Add a {@link LoggerEventListener} to the repository. The listener +will be called when repository events occur. +@since 1.3*/ + public void addLoggerEventListener(LoggerEventListener listener) { +if(loggerEventListeners.contains(listener)) { + LogLog.warn( +"Ignoring attempt to add a previously registerd LoggerEventListener."); +} else { + loggerEventListeners.addElement(listener); +} + } + + /** +Remove a {@link LoggerEventListener} from the repository. +@since 1.3*/ + public void removeLoggerEventListener(LoggerEventListener listener) { + +if(!loggerEventListeners.contains(listener)) { + LogLog.warn( +"Ignoring attempt to remove a non-registered LoggerEventListener."); +} else { + loggerEventListeners.remove(listener); +} + } /** This call will clear all logger definitions from the internal @@ -173,25 +237,113 @@ } } - public - void fireAddAppenderEvent(Category logger, Appender appender) { + /** +@deprecated As of 1.3 use fireAddApp
cvs commit: jakarta-log4j/src/java/org/apache/log4j Hierarchy.java
pglezen 01/08/21 09:06:06 Modified:src/java/org/apache/log4j Hierarchy.java Log: Added some javadoc comments to clarify some recent changes to the following methods: enable(Priority) getEnable() isDisabled(int) Revision ChangesPath 1.25 +9 -3 jakarta-log4j/src/java/org/apache/log4j/Hierarchy.java Index: Hierarchy.java === RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/Hierarchy.java,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- Hierarchy.java2001/08/09 20:16:31 1.24 +++ Hierarchy.java2001/08/21 16:06:05 1.25 @@ -247,6 +247,12 @@ enable(Priority.ALL); } + /** + Enable logging for events with priority p or higher. + + @param p the minimum priority for which events are sent to + their appenders. + @since 1.1.3 */ public void enable(Priority p) { if(p != null) { @@ -281,8 +287,8 @@ } /** - Returns the string representation of the internal - disable state. + Returns a {@link Priority} representation of the + enable state. @since 1.2 */ @@ -399,7 +405,7 @@ } /** - @deprecated No replacement offered. + @deprecated See {@link #getEnable} for similar functionality. */ public - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-log4j/src/java/org/apache/log4j Hierarchy.java Makefile
ceki01/07/20 09:03:41 Modified:src/java/org/apache/log4j Hierarchy.java Makefile Log: - Added new types of event firing methods to match changes in HiearchyEventListener. - Removed jmx subdir from Makefile Revision ChangesPath 1.20 +33 -5 jakarta-log4j/src/java/org/apache/log4j/Hierarchy.java Index: Hierarchy.java === RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/Hierarchy.java,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- Hierarchy.java2001/07/13 07:53:01 1.19 +++ Hierarchy.java2001/07/20 16:03:41 1.20 @@ -25,6 +25,7 @@ import org.apache.log4j.spi.RootCategory; import org.apache.log4j.spi.CategoryFactory; import org.apache.log4j.spi.HierarchyEventListener; +import org.apache.log4j.Appender; import org.apache.log4j.or.RendererMap; import org.apache.log4j.or.ObjectRenderer; import org.apache.log4j.helpers.LogLog; @@ -234,18 +235,47 @@ } private - void fireCategoryCreationEvent(Category category) { + void fireAddAppenderEvent(Category category, Appender appender) { if(listeners != null) { int size = listeners.size(); HierarchyEventListener listener; for(int i = 0; i < size; i++) { listener = (HierarchyEventListener) listeners.elementAt(i); - listener.categoryCreationEvent(category); + listener.addAppenderEvent(category, appender); } } } + + private + void fireRemoveAppenderEvent(Category category, Appender appender) { +if(listeners != null) { + int size = listeners.size(); + HierarchyEventListener listener; + for(int i = 0; i < size; i++) { + listener = (HierarchyEventListener) listeners.elementAt(i); + listener.removeAppenderEvent(category, appender); + } +} + } + /** + Returns the string representation of the internal + disable state. + + @since 1.2 + */ + public + String getDisableAsString() { +switch(disable) { +case DISABLE_OFF: return "DISABLE_OFF"; +case DISABLE_OVERRIDE: return "DISABLE_OVERRIDE"; +case Priority.DEBUG_INT: return "DISABLE_DEBUG"; +default: return "UNKNOWN_STATE"; +} + } + + /** Return a new category instance named as the first parameter using the default factory. @@ -290,7 +320,6 @@ category.setHierarchy(this); ht.put(key, category); updateParents(category); - fireCategoryCreationEvent(category); return category; } else if(o instanceof Category) { return (Category) o; @@ -301,7 +330,6 @@ ht.put(key, category); updateChildren((ProvisionNode) o, category); updateParents(category); - fireCategoryCreationEvent(category); return category; } else { @@ -396,7 +424,7 @@ This method should be used sparingly and with care as it will block all logging until it is completed. - @since version 0.8.5 */ + @since 0.8.5 */ public void resetConfiguration() { 1.12 +1 -1 jakarta-log4j/src/java/org/apache/log4j/Makefile Index: Makefile === RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/Makefile,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- Makefile 2001/07/13 07:53:05 1.11 +++ Makefile 2001/07/20 16:03:41 1.12 @@ -30,7 +30,7 @@ endif -SUBDIRS :=helpers spi config or xml net nt varia jmx test performance examples +SUBDIRS :=helpers spi config or xml net nt varia test performance examples # include master-rule file include $(DEPTH)/make/make.inc - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-log4j/src/java/org/apache/log4j Hierarchy.java
pathos 01/05/20 04:01:14 Modified:src/java/org/apache/log4j Hierarchy.java Log: Documentation changes. Revision ChangesPath 1.15 +12 -12jakarta-log4j/src/java/org/apache/log4j/Hierarchy.java Index: Hierarchy.java === RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/Hierarchy.java,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- Hierarchy.java2001/04/14 06:57:22 1.14 +++ Hierarchy.java2001/05/20 11:01:13 1.15 @@ -30,23 +30,23 @@ import org.apache.log4j.helpers.OptionConverter; /** - This class is specialized in retreiving categories by name and + This class is specialized in retrieving categories by name and also maintaining the category hierarchy. The casual user should not have to deal with this class - firectly. In fact, up until version 0.9.0, this class had + directly. In fact, up until version 0.9.0, this class had default package access. However, if you are in an environment where multiple applications run in the same VM, then read on. - The structure of the category hierachy is maintained by the - {@link #getInstance} method. The hierrachy is such that children + The structure of the category hierarchy is maintained by the + {@link #getInstance} method. The hierarchy is such that children link to their parent but parents do not have any pointers to their children. Moreover, categories can be instantiated in any order, in - particular decendant before ancestor. + particular descendant before ancestor. - In case a decendant is created before a particular ancestor, + In case a descendant is created before a particular ancestor, then it creates a provision node for the ancestor and adds itself - to the provision node. Other decendants of the same ancestor add + to the provision node. Other descendants of the same ancestor add themselves to the previously created provision node. See the code below for further details. @@ -103,7 +103,7 @@ /** This call will clear all category definitions from the internal hashtable. Invoking this method will irrevocably mess up the - category hiearchy. + category hierarchy. You should really know what you are doing before invoking this method. @@ -116,7 +116,7 @@ } /** - Check if the named category exists in the hirarchy. If so return + Check if the named category exists in the hierarchy. If so return its reference, otherwise returns null. @param name The name of the category to search for. @@ -163,7 +163,7 @@ The "disable" family of methods are there for speed. They allow printing methods such as debug, info, etc. to return - immediately after an interger comparison without walking the + immediately after an integer comparison without walking the category hierarchy. In most modern computers an integer comparison is measured in nanoseconds where as a category walk is measured in units of microseconds. @@ -263,7 +263,7 @@ returned. Otherwise, a new category will be instantiated and lthen inked with its existing ancestors as well as children. - @param name The name of the category to retreive. + @param name The name of the category to retrieve. */ public @@ -280,7 +280,7 @@ factory parameter and linked with its existing ancestors as well as children. - @param name The name of the category to retreive. + @param name The name of the category to retrieve. @param factory The factory that will make the new category instance. */ - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]