1
2
3
4
5
6
7
8
9
10
11 package ch.qos.logback.classic;
12
13 import java.util.ArrayList;
14 import java.util.HashMap;
15 import java.util.Iterator;
16 import java.util.Map;
17
18 import org.slf4j.helpers.MarkerIgnoringBase;
19
20 import ch.qos.logback.classic.ClassicGlobal;
21 import ch.qos.logback.classic.Level;
22 import ch.qos.logback.classic.spi.LoggingEvent;
23 import ch.qos.logback.core.Appender;
24
25
26 public class HLogger extends MarkerIgnoringBase {
27
28 private static final long serialVersionUID = 1L;
29
30 static int instanceCount = 0;
31
32
33
34
35 private String name;
36
37
38 private Level level;
39
40
41
42 private Level effectiveLevel;
43
44
45
46
47
48 HLogger parent;
49
50
51
52
53 Map<String, HLogger> childrenMap;
54
55
56
57
58 private ArrayList<Appender<LoggingEvent>> appenderList;
59
60
61
62
63
64
65
66
67
68 protected boolean additive = true;
69
70 HLogger(String name, HLogger parent) {
71 this.name = name;
72 this.parent = parent;
73 instanceCount++;
74 }
75
76 Level getEffectiveLevel() {
77 return effectiveLevel;
78 }
79
80 Level getLevel() {
81 return level;
82 }
83
84 public String getName() {
85 return name;
86 }
87
88 private final boolean isRootLogger() {
89
90 return parent == null;
91 }
92
93
94
95
96
97
98
99
100
101
102
103 HLogger getChildBySuffix(final String suffix) {
104 if (childrenMap == null) {
105 return null;
106 } else {
107 return (HLogger) childrenMap.get(suffix);
108 }
109 }
110
111 public synchronized void setLevel(Level newLevel) {
112 if (level == newLevel) {
113
114 return;
115 }
116
117 level = newLevel;
118 effectiveLevel = newLevel;
119 if (childrenMap != null) {
120 for (Iterator i = childrenMap.values().iterator(); i.hasNext();) {
121 HLogger child = (HLogger) i.next();
122
123
124 child.handleParentLevelChange(effectiveLevel);
125 }
126 }
127 }
128
129
130
131
132
133
134
135 private synchronized void handleParentLevelChange(Level newParentLevel) {
136
137
138 if (level == null) {
139 effectiveLevel = newParentLevel;
140
141
142 if (childrenMap != null) {
143 for (Iterator i = childrenMap.values().iterator(); i.hasNext();) {
144 HLogger child = (HLogger) i.next();
145
146 child.handleParentLevelChange(effectiveLevel);
147 }
148 }
149 }
150 }
151
152
153
154
155
156 public synchronized void removeAllAppenders() {
157 if (appenderList != null) {
158 int len = appenderList.size();
159 for (int i = 0; i < len; i++) {
160 Appender a = appenderList.get(i);
161 a.stop();
162 }
163 appenderList.clear();
164 appenderList = null;
165 }
166 }
167
168
169
170
171
172
173
174 public void callAppenders(LoggingEvent event) {
175 int writes = 0;
176
177 for (HLogger l = this; l != null; l = l.parent) {
178
179 synchronized (l) {
180 if (l.appenderList != null) {
181 writes += l.appendLoopOnAppenders(event);
182 }
183 if (!l.additive) {
184 break;
185 }
186 }
187 }
188
189
190
191
192
193
194
195
196 }
197
198 private int appendLoopOnAppenders(LoggingEvent event) {
199 int size = 0;
200 Appender<LoggingEvent> appender;
201
202 if (appenderList != null) {
203 size = appenderList.size();
204 for (int i = 0; i < size; i++) {
205 appender = appenderList.get(i);
206 appender.doAppend(event);
207 }
208 }
209 return size;
210 }
211
212
213
214
215 public synchronized void removeAppender(Appender appender) {
216 if ((appender == null) || (appenderList == null)) {
217 }
218 appenderList.remove(appender);
219 }
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236 HLogger createChildByLastNamePart(final String lastPart) {
237 int i_index = lastPart.indexOf(ClassicGlobal.LOGGER_SEPARATOR);
238 if (i_index != -1) {
239 throw new IllegalArgumentException("Child name [" + lastPart
240 + " passed as parameter, may not include [" + ClassicGlobal.LOGGER_SEPARATOR
241 + "]");
242 }
243
244 if (childrenMap == null) {
245 childrenMap = new HashMap<String, HLogger>(2);
246 }
247 HLogger childHLogger;
248 if (this.isRootLogger()) {
249 childHLogger = new HLogger(lastPart, this);
250 } else {
251 childHLogger = new HLogger(name + ClassicGlobal.LOGGER_SEPARATOR + lastPart,
252 this);
253 }
254 childrenMap.put(lastPart, childHLogger);
255 childHLogger.effectiveLevel = this.effectiveLevel;
256 return childHLogger;
257 }
258
259 public final void trace(String msg) {
260 if (effectiveLevel.levelInt <= Level.TRACE_INT) {
261 throw new UnsupportedOperationException("not yet implemented");
262 }
263 }
264
265 public void trace(String msg, Throwable t) {
266
267
268 }
269
270 public void trace(Object parameterizedMsg, Object param1) {
271
272
273 }
274
275 public void trace(String parameterizedMsg, Object param1, Object param2) {
276
277
278 }
279
280
281
282 public final void debug(String msg) {
283 if (effectiveLevel.levelInt <= Level.DEBUG_INT) {
284 throw new UnsupportedOperationException("not yet implemented");
285 }
286 }
287
288 public void debug(String msg, Throwable t) {
289
290
291 }
292
293 public void debug(Object parameterizedMsg, Object param1) {
294
295
296 }
297
298 public void debug(String parameterizedMsg, Object param1, Object param2) {
299
300
301 }
302
303 public void error(String msg) {
304
305
306 }
307
308 public void error(String msg, Throwable t) {
309
310
311 }
312
313 public void error(String parameterizedMsg, Object param1) {
314
315
316 }
317
318 public void error(String parameterizedMsg, Object param1, Object param2) {
319
320
321 }
322
323 public void info(String msg) {
324
325
326 }
327
328 public void info(String msg, Throwable t) {
329
330
331 }
332
333 public void info(String parameterizedMsg, Object param1) {
334
335
336 }
337
338 public void info(String parameterizedMsg, Object param1, Object param2) {
339
340
341 }
342
343 public boolean isTraceEnabled() {
344 return false;
345 }
346
347 public boolean isDebugEnabled() {
348 return false;
349 }
350
351 public boolean isErrorEnabled() {
352 return false;
353
354 }
355
356 public boolean isInfoEnabled() {
357 return false;
358
359 }
360
361 public boolean isWarnEnabled() {
362 return false;
363
364 }
365
366 public void warn(String msg) {
367
368
369 }
370
371 public void warn(String msg, Throwable t) {
372
373
374 }
375
376 public void warn(String parameterizedMsg, Object param1) {
377
378
379 }
380
381 public void warn(String parameterizedMsg, Object param1, Object param2) {
382
383
384 }
385
386 public void trace(String format, Object arg) {
387 }
388
389 public void trace(String format, Object[] argArray) {
390 }
391
392 public void debug(String format, Object arg) {
393 }
394
395 public void debug(String format, Object[] argArray) {
396 }
397
398 public void info(String format, Object[] argArray) {
399 }
400
401 public void warn(String format, Object[] argArray) {
402 }
403
404 public void error(String format, Object[] argArray) {
405 }
406 }