View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    * 
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   * 
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  package org.apache.log4j.helpers;
19  
20  import org.apache.log4j.spi.AppenderAttachable;
21  import org.apache.log4j.spi.LoggingEvent;
22  
23  import org.apache.log4j.Appender;
24  import java.util.Vector;
25  import java.util.Enumeration;
26  
27  /**
28     A straightforward implementation of the {@link AppenderAttachable}
29     interface.
30  
31     @author Ceki Gülcü
32     @since version 0.9.1 */
33  public class AppenderAttachableImpl implements AppenderAttachable {
34    
35    /** Array of appenders. */
36    protected Vector  appenderList;
37  
38    /**
39       Attach an appender. If the appender is already in the list in
40       won't be added again.
41    */
42    public
43    void addAppender(Appender newAppender) {
44      // Null values for newAppender parameter are strictly forbidden.
45      if(newAppender == null)
46        return;
47      
48      if(appenderList == null) {
49        appenderList = new Vector(1);
50      }
51      if(!appenderList.contains(newAppender))
52        appenderList.addElement(newAppender);
53    }
54  
55    /**
56       Call the <code>doAppend</code> method on all attached appenders.  */
57    public
58    int appendLoopOnAppenders(LoggingEvent event) {
59      int size = 0;
60      Appender appender;
61  
62      if(appenderList != null) {
63        size = appenderList.size();
64        for(int i = 0; i < size; i++) {
65  	appender = (Appender) appenderList.elementAt(i);
66  	appender.doAppend(event);
67        }
68      }    
69      return size;
70    }
71  
72  
73    /**
74       Get all attached appenders as an Enumeration. If there are no
75       attached appenders <code>null</code> is returned.
76       
77       @return Enumeration An enumeration of attached appenders.
78     */
79    public
80    Enumeration getAllAppenders() {
81      if(appenderList == null)
82        return null;
83      else 
84        return appenderList.elements();    
85    }
86  
87    /**
88       Look for an attached appender named as <code>name</code>.
89  
90       <p>Return the appender with that name if in the list. Return null
91       otherwise.  
92       
93     */
94    public
95    Appender getAppender(String name) {
96       if(appenderList == null || name == null)
97        return null;
98  
99       int size = appenderList.size();
100      Appender appender;
101      for(int i = 0; i < size; i++) {
102        appender = (Appender) appenderList.elementAt(i);
103        if(name.equals(appender.getName()))
104 	  return appender;
105      }
106      return null;    
107   }
108 
109 
110   /**
111      Returns <code>true</code> if the specified appender is in the
112      list of attached appenders, <code>false</code> otherwise.
113 
114      @since 1.2 */
115   public 
116   boolean isAttached(Appender appender) {
117     if(appenderList == null || appender == null)
118       return false;
119 
120      int size = appenderList.size();
121      Appender a;
122      for(int i = 0; i < size; i++) {
123        a  = (Appender) appenderList.elementAt(i);
124        if(a == appender)
125 	  return true;
126      }
127      return false;    
128   }
129 
130 
131 
132   /**
133    * Remove and close all previously attached appenders.
134    * */
135   public
136   void removeAllAppenders() {
137     if(appenderList != null) {
138       int len = appenderList.size();      
139       for(int i = 0; i < len; i++) {
140 	Appender a = (Appender) appenderList.elementAt(i);
141 	a.close();
142       }
143       appenderList.removeAllElements();
144       appenderList = null;      
145     }
146   }
147 
148 
149   /**
150      Remove the appender passed as parameter form the list of attached
151      appenders.  */
152   public
153   void removeAppender(Appender appender) {
154     if(appender == null || appenderList == null) 
155       return;
156     appenderList.removeElement(appender);    
157   }
158 
159 
160  /**
161     Remove the appender with the name passed as parameter form the
162     list of appenders.  
163   */
164   public
165   void removeAppender(String name) {
166     if(name == null || appenderList == null) return;
167     int size = appenderList.size();
168     for(int i = 0; i < size; i++) {
169       if(name.equals(((Appender)appenderList.elementAt(i)).getName())) {
170 	 appenderList.removeElementAt(i);
171 	 break;
172       }
173     }
174   }
175 
176 }