1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 package org.waarp.common.logging;
34
35 import java.io.Serializable;
36
37
38
39
40
41
42
43
44 public abstract class AbstractWaarpLogger implements WaarpLogger, Serializable {
45
46 private static final long serialVersionUID = -6382972526573193470L;
47
48 private static final String EXCEPTION_MESSAGE = "Unexpected exception:";
49
50 private final String name;
51
52
53
54
55 protected AbstractWaarpLogger(final String name) {
56 if (name == null) {
57 throw new IllegalArgumentException("name");
58 }
59 this.name = name;
60 }
61
62 @Override
63 public final String name() {
64 return name;
65 }
66
67 @Override
68 public final boolean isEnabled(final WaarpLogLevel level) {
69 switch (level) {
70 case TRACE:
71 return isTraceEnabled();
72 case DEBUG:
73 return isDebugEnabled();
74 case INFO:
75 return isInfoEnabled();
76 case WARN:
77 return isWarnEnabled();
78 case ERROR:
79 return isErrorEnabled();
80 default:
81 return false;
82 }
83 }
84
85 @Override
86 public final void trace(final Throwable t) {
87 trace(EXCEPTION_MESSAGE, t);
88 }
89
90 @Override
91 public final void debug(final Throwable t) {
92 debug(EXCEPTION_MESSAGE, t);
93 }
94
95 @Override
96 public final void info(final Throwable t) {
97 info(EXCEPTION_MESSAGE, t);
98 }
99
100 @Override
101 public final void warn(final Throwable t) {
102 warn(EXCEPTION_MESSAGE, t);
103 }
104
105 @Override
106 public final void error(final Throwable t) {
107 error(EXCEPTION_MESSAGE, t);
108 }
109
110 @Override
111 public final void log(final WaarpLogLevel level, final String msg,
112 final Throwable cause) {
113 switch (level) {
114 case TRACE:
115 trace(msg, cause);
116 break;
117 case DEBUG:
118 debug(msg, cause);
119 break;
120 case INFO:
121 info(msg, cause);
122 break;
123 case WARN:
124 warn(msg, cause);
125 break;
126 case ERROR:
127 error(msg, cause);
128 break;
129 default:
130 }
131 }
132
133 @Override
134 public final void log(final WaarpLogLevel level, final Throwable cause) {
135 switch (level) {
136 case TRACE:
137 trace(cause);
138 break;
139 case DEBUG:
140 debug(cause);
141 break;
142 case INFO:
143 info(cause);
144 break;
145 case WARN:
146 warn(cause);
147 break;
148 case ERROR:
149 error(cause);
150 break;
151 default:
152 }
153 }
154
155 @Override
156 public final void log(final WaarpLogLevel level, final String msg) {
157 switch (level) {
158 case TRACE:
159 trace(msg);
160 break;
161 case DEBUG:
162 debug(msg);
163 break;
164 case INFO:
165 info(msg);
166 break;
167 case WARN:
168 warn(msg);
169 break;
170 case ERROR:
171 error(msg);
172 break;
173 default:
174 }
175 }
176
177 @Override
178 public final void log(final WaarpLogLevel level, final String format,
179 final Object arg) {
180 switch (level) {
181 case TRACE:
182 trace(format, arg);
183 break;
184 case DEBUG:
185 debug(format, arg);
186 break;
187 case INFO:
188 info(format, arg);
189 break;
190 case WARN:
191 warn(format, arg);
192 break;
193 case ERROR:
194 error(format, arg);
195 break;
196 default:
197 }
198 }
199
200 @Override
201 public final void log(final WaarpLogLevel level, final String format,
202 final Object argA, final Object argB) {
203 switch (level) {
204 case TRACE:
205 trace(format, argA, argB);
206 break;
207 case DEBUG:
208 debug(format, argA, argB);
209 break;
210 case INFO:
211 info(format, argA, argB);
212 break;
213 case WARN:
214 warn(format, argA, argB);
215 break;
216 case ERROR:
217 error(format, argA, argB);
218 break;
219 default:
220 }
221 }
222
223 @Override
224 public final void log(final WaarpLogLevel level, final String format,
225 final Object... arguments) {
226 switch (level) {
227 case TRACE:
228 trace(format, arguments);
229 break;
230 case DEBUG:
231 debug(format, arguments);
232 break;
233 case INFO:
234 info(format, arguments);
235 break;
236 case WARN:
237 warn(format, arguments);
238 break;
239 case ERROR:
240 error(format, arguments);
241 break;
242 default:
243 }
244 }
245
246 protected final Object readResolve() {
247 return WaarpLoggerFactory.getInstance(name());
248 }
249
250
251
252
253
254
255 public static String simpleClassName(final Object o) {
256 if (o == null) {
257 return "null_object";
258 } else {
259 return simpleClassName(o.getClass());
260 }
261 }
262
263
264
265
266
267
268 public static String simpleClassName(final Class<?> clazz) {
269 if (clazz == null) {
270 return "null_class";
271 }
272 final Package pkg = clazz.getPackage();
273 if (pkg != null) {
274 return clazz.getName().substring(pkg.getName().length() + 1);
275 } else {
276 return clazz.getName();
277 }
278 }
279
280 @Override
281 public String toString() {
282 return simpleClassName(this) + '(' + name() + ')';
283 }
284
285 private static final int BASELEVEL;
286 private static final int LOGLEVEL;
287
288
289
290
291
292
293 private static int detectLoggingBaseLevel() {
294 final StackTraceElement[] elt = Thread.currentThread().getStackTrace();
295 int i;
296 for (i = 0; i < elt.length; i++) {
297 if ("detectLoggingBaseLevel".equalsIgnoreCase(elt[i].getMethodName())) {
298 break;
299 }
300 }
301 return i;
302 }
303
304 static {
305 BASELEVEL = detectLoggingBaseLevel();
306 LOGLEVEL = BASELEVEL + 2;
307 }
308
309
310
311
312
313
314
315 public static String getImmediateMethodAndLine() {
316 final StackTraceElement elt =
317 Thread.currentThread().getStackTrace()[BASELEVEL + 1];
318 return getMethodAndLine(elt);
319 }
320
321
322
323
324
325
326
327
328 public static String getLoggerMethodAndLine() {
329 final StackTraceElement elt =
330 Thread.currentThread().getStackTrace()[LOGLEVEL];
331 return getMethodAndLine(elt);
332 }
333
334
335
336
337
338
339 public static String getLoggerMethodAndLineCallee(final int deep) {
340 final StackTraceElement elt =
341 Thread.currentThread().getStackTrace()[LOGLEVEL + deep];
342 return getMethodAndLine(elt);
343 }
344
345
346
347
348
349
350 protected static String getRankMethodAndLine(final int rank) {
351 final StackTraceElement elt = Thread.currentThread().getStackTrace()[rank];
352 return getMethodAndLine(elt);
353 }
354
355
356
357
358
359
360
361 private static String getMethodAndLine(final StackTraceElement elt) {
362 final StringBuilder builder =
363 new StringBuilder(elt.getClassName()).append('.')
364 .append(elt.getMethodName())
365 .append('(')
366 .append(elt.getFileName())
367 .append(':')
368 .append(elt.getLineNumber())
369 .append(") : ");
370 if (WaarpLoggerFactory.localName != null) {
371 builder.append('[').append(WaarpLoggerFactory.localName).append("] ");
372 }
373 return builder.toString();
374 }
375
376 }