1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.core.appender;
18
19 import java.io.Serializable;
20
21 import org.apache.logging.log4j.Logger;
22 import org.apache.logging.log4j.core.Appender;
23 import org.apache.logging.log4j.core.ErrorHandler;
24 import org.apache.logging.log4j.core.Filter;
25 import org.apache.logging.log4j.core.Layout;
26 import org.apache.logging.log4j.core.LifeCycle;
27 import org.apache.logging.log4j.core.LogEvent;
28 import org.apache.logging.log4j.core.filter.AbstractFilterable;
29 import org.apache.logging.log4j.status.StatusLogger;
30
31
32
33
34
35
36
37 public abstract class AbstractAppender<T extends Serializable> extends AbstractFilterable
38 implements Appender<T>, LifeCycle {
39
40
41
42 protected static final Logger LOGGER = StatusLogger.getLogger();
43
44
45
46
47 private boolean started = false;
48
49 private final Layout<T> layout;
50
51 private final String name;
52
53 private final boolean handleException;
54
55 private ErrorHandler handler = new DefaultErrorHandler(this);
56
57
58
59
60
61
62
63 protected AbstractAppender(final String name, final Filter filter, final Layout<T> layout) {
64 this(name, filter, layout, true);
65 }
66
67
68
69
70
71
72
73
74
75 protected AbstractAppender(final String name, final Filter filter, final Layout<T> layout,
76 final boolean handleException) {
77 super(filter);
78 this.name = name;
79 this.layout = layout;
80 this.handleException = handleException;
81 }
82
83
84
85
86
87 @Override
88 public ErrorHandler getHandler() {
89 return handler;
90 }
91
92
93
94
95
96 @Override
97 public void setHandler(final ErrorHandler handler) {
98 if (handler == null) {
99 LOGGER.error("The handler cannot be set to null");
100 }
101 if (isStarted()) {
102 LOGGER.error("The handler cannot be changed once the appender is started");
103 return;
104 }
105 this.handler = handler;
106 }
107
108
109
110
111
112 @Override
113 public String getName() {
114 return name;
115 }
116
117
118
119
120
121 @Override
122 public Layout<T> getLayout() {
123 return layout;
124 }
125
126
127
128
129
130
131 @Override
132 public boolean isExceptionSuppressed() {
133 return handleException;
134 }
135
136
137
138
139 @Override
140 public void start() {
141 startFilter();
142 this.started = true;
143 }
144
145
146
147
148 @Override
149 public void stop() {
150 this.started = false;
151 stopFilter();
152 }
153
154
155
156
157
158 @Override
159 public boolean isStarted() {
160 return started;
161 }
162
163 @Override
164 public String toString() {
165 return name;
166 }
167
168
169
170
171
172 public void error(final String msg) {
173 handler.error(msg);
174 }
175
176
177
178
179
180
181 public void error(final String msg, final Throwable t) {
182 handler.error(msg, t);
183 }
184
185
186
187
188
189
190
191 public void error(final String msg, final LogEvent event, final Throwable t) {
192 handler.error(msg, event, t);
193 }
194
195 }