1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.log4j.helpers;
18
19 import org.apache.log4j.Appender;
20 import org.apache.log4j.spi.AppenderAttachable;
21 import org.apache.log4j.spi.LoggingEvent;
22
23 import java.util.Collections;
24 import java.util.Enumeration;
25 import java.util.concurrent.ConcurrentHashMap;
26 import java.util.concurrent.ConcurrentMap;
27
28
29
30
31 public class AppenderAttachableImpl implements AppenderAttachable {
32
33 private final ConcurrentMap<String, Appender> appenders = new ConcurrentHashMap<>();
34
35 @Override
36 public void addAppender(Appender newAppender) {
37 if (newAppender != null) {
38 appenders.put(newAppender.getName(), newAppender);
39 }
40 }
41
42 @Override
43 public Enumeration<Appender> getAllAppenders() {
44 return Collections.enumeration(appenders.values());
45 }
46
47 @Override
48 public Appender getAppender(String name) {
49 return appenders.get(name);
50 }
51
52 @Override
53 public boolean isAttached(Appender appender) {
54 return appenders.containsValue(appender);
55 }
56
57 @Override
58 public void removeAllAppenders() {
59 appenders.clear();
60 }
61
62 @Override
63 public void removeAppender(Appender appender) {
64 appenders.remove(appender.getName(), appender);
65 }
66
67 @Override
68 public void removeAppender(String name) {
69 appenders.remove(name);
70 }
71
72
73
74
75
76
77 public int appendLoopOnAppenders(LoggingEvent event) {
78 for (Appender appender : appenders.values()) {
79 appender.doAppend(event);
80 }
81 return appenders.size();
82 }
83
84 public void close() {
85 for (Appender appender : appenders.values()) {
86 appender.close();
87 }
88 }
89 }