1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.log4j.rewrite;
18
19 import org.apache.log4j.Appender;
20 import org.apache.log4j.AppenderSkeleton;
21 import org.apache.log4j.helpers.AppenderAttachableImpl;
22 import org.apache.log4j.spi.AppenderAttachable;
23 import org.apache.log4j.spi.LoggingEvent;
24 import org.apache.log4j.spi.OptionHandler;
25 import org.apache.log4j.xml.UnrecognizedElementHandler;
26 import org.w3c.dom.Element;
27
28 import java.util.Enumeration;
29 import java.util.Properties;
30
31
32
33
34
35
36
37
38
39 public class RewriteAppender extends AppenderSkeleton
40 implements AppenderAttachable, UnrecognizedElementHandler {
41
42
43
44 private RewritePolicy policy;
45
46
47
48 private final AppenderAttachableImpl appenders;
49
50 public RewriteAppender() {
51 appenders = new AppenderAttachableImpl();
52 }
53
54
55
56
57 protected void append(final LoggingEvent event) {
58 LoggingEvent rewritten = event;
59 if (policy != null) {
60 rewritten = policy.rewrite(event);
61 }
62 if (rewritten != null) {
63 synchronized (appenders) {
64 appenders.appendLoopOnAppenders(rewritten);
65 }
66 }
67 }
68
69
70
71
72
73
74 public void addAppender(final Appender newAppender) {
75 synchronized (appenders) {
76 appenders.addAppender(newAppender);
77 }
78 }
79
80
81
82
83
84
85 public Enumeration getAllAppenders() {
86 synchronized (appenders) {
87 return appenders.getAllAppenders();
88 }
89 }
90
91
92
93
94
95
96
97 public Appender getAppender(final String name) {
98 synchronized (appenders) {
99 return appenders.getAppender(name);
100 }
101 }
102
103
104
105
106
107
108 public void close() {
109 closed = true;
110
111
112
113 synchronized (appenders) {
114 Enumeration iter = appenders.getAllAppenders();
115
116 if (iter != null) {
117 while (iter.hasMoreElements()) {
118 Object next = iter.nextElement();
119
120 if (next instanceof Appender) {
121 ((Appender) next).close();
122 }
123 }
124 }
125 }
126 }
127
128
129
130
131
132
133
134 public boolean isAttached(final Appender appender) {
135 synchronized (appenders) {
136 return appenders.isAttached(appender);
137 }
138 }
139
140
141
142
143 public boolean requiresLayout() {
144 return false;
145 }
146
147
148
149
150 public void removeAllAppenders() {
151 synchronized (appenders) {
152 appenders.removeAllAppenders();
153 }
154 }
155
156
157
158
159
160
161 public void removeAppender(final Appender appender) {
162 synchronized (appenders) {
163 appenders.removeAppender(appender);
164 }
165 }
166
167
168
169
170
171
172 public void removeAppender(final String name) {
173 synchronized (appenders) {
174 appenders.removeAppender(name);
175 }
176 }
177
178
179 public void setRewritePolicy(final RewritePolicy rewritePolicy) {
180 policy = rewritePolicy;
181 }
182
183
184
185
186 public boolean parseUnrecognizedElement(final Element element,
187 final Properties props) throws Exception {
188 final String nodeName = element.getNodeName();
189 if ("rewritePolicy".equals(nodeName)) {
190 Object rewritePolicy =
191 org.apache.log4j.xml.DOMConfigurator.parseElement(
192 element, props, RewritePolicy.class);
193 if (rewritePolicy != null) {
194 if (rewritePolicy instanceof OptionHandler) {
195 ((OptionHandler) rewritePolicy).activateOptions();
196 }
197 this.setRewritePolicy((RewritePolicy) rewritePolicy);
198 }
199 return true;
200 }
201 return false;
202 }
203
204 }