1
2
3
4
5
6
7
8
9
10
11 package ch.qos.logback.classic.spi;
12
13 import java.io.Externalizable;
14 import java.io.IOException;
15 import java.io.ObjectInput;
16 import java.io.ObjectOutput;
17
18 import org.slf4j.Logger;
19 import org.slf4j.LoggerFactory;
20 import org.slf4j.Marker;
21 import org.slf4j.helpers.MessageFormatter;
22
23 import ch.qos.logback.classic.Level;
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 public class LoggingEventExt implements Externalizable {
42
43
44
45
46 private static final long serialVersionUID = 3022264832697160750L;
47
48
49
50
51 private static long startTime = System.currentTimeMillis();
52
53
54
55
56
57
58
59
60 transient String fqnOfLoggerClass;
61
62
63
64
65 private String threadName;
66
67
68
69
70
71
72
73
74
75
76 private Level level;
77
78 private String message;
79 private String formattedMessage;
80
81 private Object[] argumentArray;
82
83 private Logger logger;
84
85 private ThrowableProxy throwableInfo;
86
87 private CallerData[] callerDataArray;
88
89 private Marker marker;
90
91
92
93
94
95 private long timeStamp;
96
97 public LoggingEventExt() {
98 }
99
100 public LoggingEventExt(String fqcn, Logger logger, Level level, String message,
101 Throwable throwable, Object[] argArray) {
102 this.fqnOfLoggerClass = fqcn;
103 this.logger = logger;
104 this.level = level;
105 this.message = message;
106
107 if (throwable != null) {
108 this.throwableInfo = new ThrowableProxy(throwable);
109 }
110
111 if (argArray != null) {
112 formattedMessage = MessageFormatter.arrayFormat(message, argArray);
113 } else {
114 formattedMessage = message;
115 }
116 timeStamp = System.currentTimeMillis();
117 }
118
119 public Object[] getArgumentArray() {
120 return this.argumentArray;
121 }
122
123 public Level getLevel() {
124 return level;
125 }
126
127 public String getThreadName() {
128 if (threadName == null) {
129 threadName = (Thread.currentThread()).getName();
130 }
131 return threadName;
132 }
133
134
135
136
137
138
139
140 public void setThreadName(String threadName) throws IllegalStateException {
141 if (this.threadName != null) {
142 throw new IllegalStateException("threadName has been already set");
143 }
144 this.threadName = threadName;
145 }
146
147
148
149
150
151 public ThrowableProxy getThrowableInformation() {
152 return throwableInfo;
153 }
154
155
156
157
158 public void setThrowableInformation(ThrowableProxy ti) {
159 if (throwableInfo != null) {
160 throw new IllegalStateException(
161 "ThrowableInformation has been already set.");
162 } else {
163 throwableInfo = ti;
164 }
165 }
166
167
168
169
170
171 public void prepareForDeferredProcessing() {
172 this.getThreadName();
173 }
174
175 public Logger getLogger() {
176 return logger;
177 }
178
179 public void setLogger(Logger logger) {
180 this.logger = logger;
181 }
182
183 public String getMessage() {
184 return message;
185 }
186
187 public void setMessage(String message) {
188 if (this.message != null) {
189 throw new IllegalStateException(
190 "The message for this event has been set already.");
191 }
192 this.message = message;
193 }
194
195 public long getTimeStamp() {
196 return timeStamp;
197 }
198
199 public void setTimeStamp(long timeStamp) {
200 this.timeStamp = timeStamp;
201 }
202
203 public void setLevel(Level level) {
204 if (this.level != null) {
205 throw new IllegalStateException(
206 "The level has been already set for this event.");
207 }
208 this.level = level;
209 }
210
211
212
213
214
215
216
217 public static final long getStartTime() {
218 return startTime;
219 }
220
221
222
223
224
225
226
227
228
229
230
231 public CallerData[] getCallerData() {
232
233
234 if (callerDataArray == null && fqnOfLoggerClass != null) {
235 callerDataArray = CallerData.extract(new Throwable(), fqnOfLoggerClass);
236 }
237 return callerDataArray;
238 }
239
240 public void setCallerInformation(CallerData[] callerDataArray) {
241 this.callerDataArray = callerDataArray;
242 }
243
244 public Marker getMarker() {
245 return marker;
246 }
247
248 public void setMarker(Marker marker) {
249 if (this.marker != null) {
250 throw new IllegalStateException(
251 "The marker has been already set for this event.");
252 }
253 this.marker = marker;
254 }
255
256 public String getFormattedMessage() {
257 return formattedMessage;
258 }
259
260 public void readExternal(ObjectInput in) throws IOException,
261 ClassNotFoundException {
262 threadName = (String) in.readObject();
263 message = (String) in.readObject();
264 formattedMessage = (String)in.readObject();
265 int levelInt = in.readInt();
266 level = Level.toLevel(levelInt);
267 String loggerName = (String) in.readObject();
268 logger = LoggerFactory.getLogger(loggerName);
269 }
270
271 public void writeExternal(ObjectOutput out) throws IOException {
272 if (threadName != null) {
273 out.writeObject(threadName);
274 } else {
275 out.writeObject("noThreadName");
276 }
277 out.writeObject(message);
278 out.writeObject(formattedMessage);
279 out.writeInt(level.levelInt);
280 out.writeObject(logger.getName());
281
282
283
284 }
285
286 }