1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
44
45
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
57 /**
58 * Creates a new <code>LoggerHandler</code>.
59 */
60 public LoggerHandler() {
61 defaultLogger.setLogLevel(Logger.DEBUG);
62 }
63
64
65
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
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
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 }