View Javadoc

1   /*
2    * $Id: LoggerHandler.java 124 2004-11-01 18:09:40Z josem $
3    *
4    * Tarsis
5    * Copyright (C) 2002 Talika Open Source Group
6    *
7    * This program is free software; you can redistribute it and/or modify
8    * it under the terms of the GNU General Public License as published by
9    * the Free Software Foundation; either version 2 of the License, or
10   * (at your option) any later version.
11   *
12   * This program is distributed in the hope that it will be useful,
13   * but WITHOUT ANY WARRANTY; without even the implied warranty of
14   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15   * GNU General Public License for more details.
16   *
17   * You should have received a copy of the GNU General Public License
18   * along with this program; if not, write to the Free Software
19   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20   *
21   */
22  
23  package org.talika.tarsis.log;
24  
25  
26  import java.util.Collection;
27  import java.util.LinkedList;
28  import java.util.Iterator;
29  import java.util.List;
30  
31  import org.talika.tarsis.context.Context;
32  import org.talika.tarsis.service.ServiceException;
33  
34  /**
35   * Special implementation of <code>Logger</code> interface that serves as a multiplexer
36   * that writes log messages to a list of <code>Logger</code> instances.
37   *
38   * @author  Jose M. Palomar
39   * @version $Revision: 124 $
40   */
41  public final class LoggerHandler extends LoggerService {
42  
43      // Constants
44  
45      // Fields
46      /**
47       * Default <code>Logger</code>.
48       */
49      private ConsoleLogger defaultLogger = new ConsoleLogger();
50  
51      /**
52       * List of <code>Logger</code> instances.
53       */
54      private List loggers = new LinkedList();
55  
56      // Constructors
57      /**
58       * Creates a new <code>LoggerHandler</code>.
59       */
60      public LoggerHandler() {
61          defaultLogger.setLogLevel(Logger.DEBUG);
62      }
63  
64      // Methods
65      // Life-cycle
66      /**
67       * Called by the framework to indicate that is being placed into service.<br>
68       * <br>
69       * Initializes the list of <code>Logger</code> instances.
70       *
71       * @param context Context context that initialized service.
72       * @throws ServiceException if an exception has occurred that interferes with the
73       * services's normal operation
74       * @see org.talika.tarsis.service.Service#init(Context)
75       */
76      public void init(Context context) throws ServiceException {
77          super.init(context);
78  
79          Iterator loggersIterator = loggers.iterator();
80          while (loggersIterator.hasNext()) {
81              LoggerService logger = (LoggerService) loggersIterator.next();
82              logger.init(context);
83          }
84  
85      }
86  
87      /**
88       * Called by the framework to indicate that is being placed out of service.<br>
89       * <br>
90       * Destroys the list of <code>Logger</code> instances.
91       *
92       * @see org.talika.tarsis.service.Service#destroy()
93       */
94      public void destroy() {
95  
96          Iterator loggersIterator = loggers.iterator();
97          while (loggersIterator.hasNext()) {
98              LoggerService logger = (LoggerService) loggersIterator.next();
99              logger.destroy();
100         }
101 
102         loggers.clear();
103 
104         super.destroy();
105     }
106 
107     /**
108      * Returns name of service.
109      *
110      * @return String name of service.
111      * @see org.talika.tarsis.service.Service#getName()
112      */
113     public String getName() {
114         return "LoggerHandler";
115     }
116 
117     // Handler
118     /**
119      * Adds a <code>Logger</code> instance to <code>Logger</code> list.
120      *
121      * @param logger LoggerService a <code>Logger</code> instance.
122      */
123     public void addLogger(LoggerService logger) {
124         loggers.add(logger);
125     }
126 
127     /**
128      * Adds a <code>Collection</code> of <code>Logger</code> instances to
129      * <code>Logger</code> list.
130      *
131      * @param loggers Collection a <code>Collection</code> of <code>Logger</code>
132      * instances.
133      */
134     public void addLoggers(Collection loggers) {
135         this.loggers.addAll(loggers);
136     }
137 
138     // Logger
139     /**
140      * Returns log level parameter.
141      *
142      * @return int log level parameter.
143      * @see org.talika.tarsis.log.Logger#getLogLevel()
144      */
145     public int getLogLevel() {
146         return defaultLogger.getLogLevel();
147     }
148 
149     /**
150      * Sets log level parameter.
151      *
152      * @param logLevel int log level parameter.
153      */
154     public void setLogLevel(int logLevel) {
155         defaultLogger.setLogLevel(logLevel);
156     }
157 
158     /**
159      * Log a message using given level.
160      *
161      * @param level int log level.
162      * @param msg String message.
163      * @see org.talika.tarsis.log.Logger#log(int, String)
164      */
165     public void log(int level, String msg) {
166 
167         defaultLogger.log(level, msg);
168 
169         Iterator loggersIterator = loggers.iterator();
170         while (loggersIterator.hasNext()) {
171             LoggerService logger = (LoggerService) loggersIterator.next();
172             if (level >= logger.getLogLevel()) {
173                 logger.log(level, msg);
174             }
175         }
176 
177     }
178 
179     /**
180      * Log an error message using given level.
181      *
182      * @param level int log level.
183      * @param msg String message.
184      * @param t Throwable a <code>Throwable</code> object.
185      * @see org.talika.tarsis.log.Logger#log(int, String, Throwable)
186      */
187     public void log(int level, String msg, Throwable t) {
188 
189         defaultLogger.log(level, msg, t);
190 
191         Iterator loggersIterator = loggers.iterator();
192         while (loggersIterator.hasNext()) {
193             LoggerService logger = (LoggerService) loggersIterator.next();
194             if (level >= logger.getLogLevel()) {
195                 logger.log(level, msg, t);
196             }
197         }
198 
199     }
200 
201     /**
202      * Writes a message to log.
203      *
204      * @param level int log level.
205      * @param msg String message.
206      */
207     protected void writeLog(int level, String msg) {
208 
209         defaultLogger.writeLog(level, msg);
210 
211         Iterator loggersIterator = loggers.iterator();
212         while (loggersIterator.hasNext()) {
213             LoggerService logger = (LoggerService) loggersIterator.next();
214             logger.writeLog(level, msg);
215         }
216 
217     }
218 
219     /**
220      * Writes an error message to log.
221      *
222      * @param level int log level.
223      * @param msg String message.
224      * @param t Throwable a <code>Throwable</code> object.
225      */
226     protected void writeLog(int level, String msg, Throwable t) {
227 
228         defaultLogger.writeLog(level, msg, t);
229 
230         Iterator loggersIterator = loggers.iterator();
231         while (loggersIterator.hasNext()) {
232             LoggerService logger = (LoggerService) loggersIterator.next();
233             logger.writeLog(level, msg, t);
234         }
235 
236     }
237 
238 }