1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.commons.logging.impl;
20
21
22 import java.io.Serializable;
23 import java.util.logging.Level;
24 import java.util.logging.Logger;
25 import java.util.logging.LogRecord;
26 import java.util.StringTokenizer;
27 import java.io.PrintWriter;
28 import java.io.StringWriter;
29
30 import org.apache.commons.logging.Log;
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 public class Jdk13LumberjackLogger implements Log, Serializable {
47
48
49
50
51
52
53
54
55 protected transient Logger logger = null;
56 protected String name = null;
57 private String sourceClassName = "unknown";
58 private String sourceMethodName = "unknown";
59 private boolean classAndMethodFound = false;
60
61
62
63
64
65
66
67
68 protected static final Level dummyLevel = Level.FINE;
69
70
71
72
73
74
75
76
77
78 public Jdk13LumberjackLogger(String name) {
79
80 this.name = name;
81 logger = getLogger();
82
83 }
84
85
86
87
88
89 private void log( Level level, String msg, Throwable ex ) {
90 if( getLogger().isLoggable(level) ) {
91 LogRecord record = new LogRecord(level, msg);
92 if( !classAndMethodFound ) {
93 getClassAndMethod();
94 }
95 record.setSourceClassName(sourceClassName);
96 record.setSourceMethodName(sourceMethodName);
97 if( ex != null ) {
98 record.setThrown(ex);
99 }
100 getLogger().log(record);
101 }
102 }
103
104
105
106
107
108 private void getClassAndMethod() {
109 try {
110 Throwable throwable = new Throwable();
111 throwable.fillInStackTrace();
112 StringWriter stringWriter = new StringWriter();
113 PrintWriter printWriter = new PrintWriter( stringWriter );
114 throwable.printStackTrace( printWriter );
115 String traceString = stringWriter.getBuffer().toString();
116 StringTokenizer tokenizer =
117 new StringTokenizer( traceString, "\n" );
118 tokenizer.nextToken();
119 String line = tokenizer.nextToken();
120 while ( line.indexOf( this.getClass().getName() ) == -1 ) {
121 line = tokenizer.nextToken();
122 }
123 while ( line.indexOf( this.getClass().getName() ) >= 0 ) {
124 line = tokenizer.nextToken();
125 }
126 int start = line.indexOf( "at " ) + 3;
127 int end = line.indexOf( '(' );
128 String temp = line.substring( start, end );
129 int lastPeriod = temp.lastIndexOf( '.' );
130 sourceClassName = temp.substring( 0, lastPeriod );
131 sourceMethodName = temp.substring( lastPeriod + 1 );
132 } catch ( Exception ex ) {
133
134 }
135 classAndMethodFound = true;
136 }
137
138
139
140
141
142
143
144 public void debug(Object message) {
145 log(Level.FINE, String.valueOf(message), null);
146 }
147
148
149
150
151
152
153
154
155
156 public void debug(Object message, Throwable exception) {
157 log(Level.FINE, String.valueOf(message), exception);
158 }
159
160
161
162
163
164
165
166
167 public void error(Object message) {
168 log(Level.SEVERE, String.valueOf(message), null);
169 }
170
171
172
173
174
175
176
177
178
179 public void error(Object message, Throwable exception) {
180 log(Level.SEVERE, String.valueOf(message), exception);
181 }
182
183
184
185
186
187
188
189
190 public void fatal(Object message) {
191 log(Level.SEVERE, String.valueOf(message), null);
192 }
193
194
195
196
197
198
199
200
201
202 public void fatal(Object message, Throwable exception) {
203 log(Level.SEVERE, String.valueOf(message), exception);
204 }
205
206
207
208
209
210 public Logger getLogger() {
211 if (logger == null) {
212 logger = Logger.getLogger(name);
213 }
214 return (logger);
215 }
216
217
218
219
220
221
222
223
224 public void info(Object message) {
225 log(Level.INFO, String.valueOf(message), null);
226 }
227
228
229
230
231
232
233
234
235
236 public void info(Object message, Throwable exception) {
237 log(Level.INFO, String.valueOf(message), exception);
238 }
239
240
241
242
243
244 public boolean isDebugEnabled() {
245 return (getLogger().isLoggable(Level.FINE));
246 }
247
248
249
250
251
252 public boolean isErrorEnabled() {
253 return (getLogger().isLoggable(Level.SEVERE));
254 }
255
256
257
258
259
260 public boolean isFatalEnabled() {
261 return (getLogger().isLoggable(Level.SEVERE));
262 }
263
264
265
266
267
268 public boolean isInfoEnabled() {
269 return (getLogger().isLoggable(Level.INFO));
270 }
271
272
273
274
275
276 public boolean isTraceEnabled() {
277 return (getLogger().isLoggable(Level.FINEST));
278 }
279
280
281
282
283
284 public boolean isWarnEnabled() {
285 return (getLogger().isLoggable(Level.WARNING));
286 }
287
288
289
290
291
292
293
294
295 public void trace(Object message) {
296 log(Level.FINEST, String.valueOf(message), null);
297 }
298
299
300
301
302
303
304
305
306
307 public void trace(Object message, Throwable exception) {
308 log(Level.FINEST, String.valueOf(message), exception);
309 }
310
311
312
313
314
315
316
317
318 public void warn(Object message) {
319 log(Level.WARNING, String.valueOf(message), null);
320 }
321
322
323
324
325
326
327
328
329
330 public void warn(Object message, Throwable exception) {
331 log(Level.WARNING, String.valueOf(message), exception);
332 }
333
334
335 }