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.core.Appender;
22 import org.apache.logging.log4j.core.ErrorHandler;
23 import org.apache.logging.log4j.core.Filter;
24 import org.apache.logging.log4j.core.Layout;
25 import org.apache.logging.log4j.core.LogEvent;
26 import org.apache.logging.log4j.core.filter.AbstractFilterable;
27 import org.apache.logging.log4j.core.helpers.Integers;
28
29
30
31
32
33 public abstract class AbstractAppender extends AbstractFilterable
34 implements Appender {
35 private final boolean ignoreExceptions;
36
37 private ErrorHandler handler = new DefaultErrorHandler(this);
38
39 private final Layout<? extends Serializable> layout;
40
41 private final String name;
42
43
44
45
46 private boolean started = false;
47
48 public static int parseInt(String s, int defaultValue) {
49 try {
50 return Integers.parseInt(s, defaultValue);
51 } catch (NumberFormatException e) {
52 LOGGER.error("Could not parse \"{}\" as an integer, using default value {}: {}", s, defaultValue, e);
53 return defaultValue;
54 }
55 }
56
57
58
59
60
61
62
63 protected AbstractAppender(final String name, final Filter filter, final Layout<? extends Serializable> 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<? extends Serializable> layout,
76 final boolean ignoreExceptions) {
77 super(filter);
78 this.name = name;
79 this.layout = layout;
80 this.ignoreExceptions = ignoreExceptions;
81 }
82
83
84
85
86
87 public void error(final String msg) {
88 handler.error(msg);
89 }
90
91
92
93
94
95
96
97 public void error(final String msg, final LogEvent event, final Throwable t) {
98 handler.error(msg, event, t);
99 }
100
101
102
103
104
105
106 public void error(final String msg, final Throwable t) {
107 handler.error(msg, t);
108 }
109
110
111
112
113
114 @Override
115 public ErrorHandler getHandler() {
116 return handler;
117 }
118
119
120
121
122
123 @Override
124 public Layout<? extends Serializable> getLayout() {
125 return layout;
126 }
127
128
129
130
131
132 @Override
133 public String getName() {
134 return name;
135 }
136
137
138
139
140
141
142
143 @Override
144 public boolean ignoreExceptions() {
145 return ignoreExceptions;
146 }
147
148
149
150
151
152 @Override
153 public boolean isStarted() {
154 return started;
155 }
156
157
158
159
160
161 @Override
162 public void setHandler(final ErrorHandler handler) {
163 if (handler == null) {
164 LOGGER.error("The handler cannot be set to null");
165 }
166 if (isStarted()) {
167 LOGGER.error("The handler cannot be changed once the appender is started");
168 return;
169 }
170 this.handler = handler;
171 }
172
173
174
175
176 @Override
177 public void start() {
178 startFilter();
179 this.started = true;
180 }
181
182
183
184
185 @Override
186 public void stop() {
187 this.started = false;
188 stopFilter();
189 }
190
191 @Override
192 public String toString() {
193 return name;
194 }
195
196 }