root/kraken-core/src/main/java/org/slf4j/impl/KrakenLogger.java

Revision 265, 10.7 KB (checked in by xeraph, 16 months ago)

Added stack trace logging.

Line 
1/*
2 * Copyright 2009 NCHOVY
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.slf4j.impl;
17
18import java.io.ByteArrayOutputStream;
19import java.io.PrintStream;
20import java.io.Serializable;
21import java.util.Date;
22import java.util.concurrent.BlockingQueue;
23
24import org.apache.log4j.Logger;
25import org.apache.log4j.Priority;
26import org.osgi.framework.ServiceReference;
27import org.slf4j.Marker;
28import org.slf4j.helpers.MessageFormatter;
29
30public class KrakenLogger extends org.apache.felix.framework.Logger implements org.slf4j.Logger, Serializable {
31        private static final long serialVersionUID = 1L;
32        private static long bootTime = System.currentTimeMillis();
33        public static final String LINE_SEPARATOR = System.getProperty("line.separator");
34        private static int INFO = Priority.INFO_INT;
35        private static int WARN = Priority.WARN_INT;
36        private static int ERROR = Priority.ERROR_INT;
37        private static int DEBUG = Priority.DEBUG_INT;
38        private static int TRACE = Priority.DEBUG_INT;
39
40        private String name;
41        private boolean isDebugEnabled = false;
42        private boolean isTraceEnabled = false;
43        private boolean isInfoEnabled = true;
44        private boolean isWarnEnabled = true;
45        private boolean isErrorEnabled = true;
46
47        private BlockingQueue<KrakenLog> queue;
48
49        public KrakenLogger(String name, BlockingQueue<KrakenLog> queue) {
50                this.name = name;
51                this.queue = queue;
52        }
53
54        @Override
55        public void debug(String format, Object arg1, Object arg2) {
56                if (isDebugEnabled)
57                        formatAndLog(DEBUG, format, arg1, arg2);
58        }
59
60        @Override
61        public void debug(String format, Object arg) {
62                if (isDebugEnabled)
63                        formatAndLog(DEBUG, format, arg, null);
64        }
65
66        @Override
67        public void debug(String format, Object[] argArray) {
68                if (isDebugEnabled)
69                        formatAndLog(DEBUG, format, argArray);
70        }
71
72        @Override
73        public void debug(String msg, Throwable t) {
74                if (isDebugEnabled)
75                        internalLog(DEBUG, msg, t);
76        }
77
78        @Override
79        public void debug(String msg) {
80                if (isDebugEnabled)
81                        internalLog(DEBUG, msg, null);
82        }
83
84        @Override
85        public void error(String format, Object arg1, Object arg2) {
86                if (isErrorEnabled)
87                        formatAndLog(ERROR, format, arg1, arg2);
88        }
89
90        @Override
91        public void error(String format, Object arg) {
92                if (isErrorEnabled)
93                        formatAndLog(ERROR, format, arg, null);
94        }
95
96        @Override
97        public void error(String format, Object[] argArray) {
98                if (isErrorEnabled)
99                        formatAndLog(ERROR, format, argArray);
100        }
101
102        @Override
103        public void error(String msg, Throwable t) {
104                if (isErrorEnabled)
105                        internalLog(ERROR, msg, t);
106        }
107
108        @Override
109        public void error(String msg) {
110                if (isErrorEnabled)
111                        internalLog(ERROR, msg, null);
112        }
113
114        @Override
115        public void info(String format, Object arg1, Object arg2) {
116                if (isInfoEnabled)
117                        formatAndLog(INFO, format, arg1, arg2);
118        }
119
120        @Override
121        public void info(String format, Object arg) {
122                if (isInfoEnabled)
123                        formatAndLog(INFO, format, arg, null);
124        }
125
126        @Override
127        public void info(String format, Object[] argArray) {
128                if (isInfoEnabled)
129                        formatAndLog(INFO, format, argArray);
130        }
131
132        @Override
133        public void info(String msg, Throwable t) {
134                if (isInfoEnabled)
135                        internalLog(INFO, msg, t);
136        }
137
138        @Override
139        public void info(String msg) {
140                if (isInfoEnabled)
141                        internalLog(INFO, msg, null);
142        }
143
144        @Override
145        public boolean isDebugEnabled() {
146                return isDebugEnabled;
147        }
148
149        @Override
150        public boolean isErrorEnabled() {
151                return isErrorEnabled;
152        }
153
154        @Override
155        public boolean isInfoEnabled() {
156                return isInfoEnabled;
157        }
158
159        @Override
160        public boolean isTraceEnabled() {
161                return isTraceEnabled;
162        }
163
164        @Override
165        public boolean isWarnEnabled() {
166                return isWarnEnabled;
167        }
168
169        public void setDebugEnabled(boolean isDebugEnabled) {
170                this.isDebugEnabled = isDebugEnabled;
171        }
172
173        public void setTraceEnabled(boolean isTraceEnabled) {
174                this.isTraceEnabled = isTraceEnabled;
175        }
176
177        public void setInfoEnabled(boolean isInfoEnabled) {
178                this.isInfoEnabled = isInfoEnabled;
179        }
180
181        public void setWarnEnabled(boolean isWarnEnabled) {
182                this.isWarnEnabled = isWarnEnabled;
183        }
184
185        public void setErrorEnabled(boolean isErrorEnabled) {
186                this.isErrorEnabled = isErrorEnabled;
187        }
188
189        @Override
190        public void trace(String format, Object arg1, Object arg2) {
191                if (isTraceEnabled)
192                        formatAndLog(TRACE, format, arg1, arg2);
193        }
194
195        @Override
196        public void trace(String format, Object arg) {
197                if (isTraceEnabled)
198                        formatAndLog(TRACE, format, arg, null);
199        }
200
201        @Override
202        public void trace(String format, Object[] argArray) {
203                if (isTraceEnabled)
204                        formatAndLog(TRACE, format, argArray);
205        }
206
207        @Override
208        public void trace(String msg, Throwable t) {
209                if (isTraceEnabled)
210                        internalLog(TRACE, msg, t);
211        }
212
213        @Override
214        public void trace(String msg) {
215                if (isTraceEnabled)
216                        internalLog(TRACE, msg, null);
217        }
218
219        @Override
220        public void warn(String format, Object arg1, Object arg2) {
221                if (isWarnEnabled)
222                        formatAndLog(WARN, format, arg1, arg2);
223        }
224
225        @Override
226        public void warn(String format, Object arg) {
227                if (isWarnEnabled)
228                        formatAndLog(WARN, format, arg, null);
229        }
230
231        @Override
232        public void warn(String format, Object[] argArray) {
233                if (isWarnEnabled)
234                        formatAndLog(WARN, format, argArray);
235        }
236
237        @Override
238        public void warn(String msg, Throwable t) {
239                if (isWarnEnabled)
240                        internalLog(WARN, msg, t);
241        }
242
243        @Override
244        public void warn(String msg) {
245                if (isWarnEnabled)
246                        internalLog(WARN, msg, null);
247        }
248
249        @SuppressWarnings("deprecation")
250        private void internalLog(int level, String message, Throwable t) {
251                Date date = new Date();
252                Priority priority = Priority.toPriority(level);
253                if (t != null) {
254                        getLogger().log(priority, message + "\n" + makeStackTrace(t));
255                } else {
256                        getLogger().log(priority, message);
257                }
258
259                long timeOffset = System.currentTimeMillis() - bootTime;
260
261                queue.add(new KrakenLog(name, timeOffset, date, level, message, t));
262        }
263
264        private String makeStackTrace(Throwable t) {
265                if (t == null)
266                        return "";
267                try {
268                        ByteArrayOutputStream out = new ByteArrayOutputStream();
269                        t.printStackTrace(new PrintStream(out));
270                        out.flush();
271                        return new String(out.toByteArray());
272                } catch (Exception e) {
273                        return "";
274                }
275        }
276
277        private Logger getLogger() {
278                return Logger.getLogger(name);
279        }
280
281        /**
282         * For formatted messages, first substitute arguments and then log.
283         *
284         * @param level
285         * @param format
286         * @param param1
287         * @param param2
288         */
289        private void formatAndLog(int level, String format, Object arg1, Object arg2) {
290                String message = MessageFormatter.format(format, arg1, arg2);
291                internalLog(level, message, null);
292        }
293
294        /**
295         * For formatted messages, first substitute arguments and then log.
296         *
297         * @param level
298         * @param format
299         * @param argArray
300         */
301        private void formatAndLog(int level, String format, Object[] argArray) {
302                String message = MessageFormatter.arrayFormat(format, argArray);
303                internalLog(level, message, null);
304        }
305
306        /**
307         * Marker ignoring base.
308         */
309
310        @Override
311        public void debug(Marker marker, String msg) {
312                debug(msg);
313        }
314
315        @Override
316        public void debug(Marker marker, String format, Object arg) {
317                debug(format, arg);
318        }
319
320        @Override
321        public void debug(Marker marker, String format, Object[] argArray) {
322                debug(format, argArray);
323        }
324
325        @Override
326        public void debug(Marker marker, String msg, Throwable t) {
327                debug(msg, t);
328        }
329
330        @Override
331        public void debug(Marker marker, String format, Object arg1, Object arg2) {
332                debug(format, arg1, arg2);
333        }
334
335        @Override
336        public void error(Marker marker, String msg) {
337                error(msg);
338        }
339
340        @Override
341        public void error(Marker marker, String format, Object arg) {
342                error(format, arg);
343        }
344
345        @Override
346        public void error(Marker marker, String format, Object[] argArray) {
347                error(format, argArray);
348        }
349
350        @Override
351        public void error(Marker marker, String msg, Throwable t) {
352                error(msg, t);
353        }
354
355        @Override
356        public void error(Marker marker, String format, Object arg1, Object arg2) {
357                error(format, arg1, arg2);
358        }
359
360        @Override
361        public void info(Marker marker, String msg) {
362                info(msg);
363        }
364
365        @Override
366        public void info(Marker marker, String format, Object arg) {
367                info(format, arg);
368        }
369
370        @Override
371        public void info(Marker marker, String format, Object[] argArray) {
372                info(format, argArray);
373        }
374
375        @Override
376        public void info(Marker marker, String msg, Throwable t) {
377                info(msg, t);
378        }
379
380        @Override
381        public void info(Marker marker, String format, Object arg1, Object arg2) {
382                info(format, arg1, arg2);
383        }
384
385        @Override
386        public boolean isDebugEnabled(Marker marker) {
387                return isDebugEnabled;
388        }
389
390        @Override
391        public boolean isErrorEnabled(Marker marker) {
392                return isErrorEnabled;
393        }
394
395        @Override
396        public boolean isInfoEnabled(Marker marker) {
397                return isInfoEnabled;
398        }
399
400        @Override
401        public boolean isTraceEnabled(Marker marker) {
402                return isTraceEnabled;
403        }
404
405        @Override
406        public boolean isWarnEnabled(Marker marker) {
407                return isWarnEnabled;
408        }
409
410        @Override
411        public void trace(Marker marker, String msg) {
412                trace(msg);
413        }
414
415        @Override
416        public void trace(Marker marker, String format, Object arg) {
417                trace(format, arg);
418        }
419
420        @Override
421        public void trace(Marker marker, String format, Object[] argArray) {
422                trace(format, argArray);
423        }
424
425        @Override
426        public void trace(Marker marker, String msg, Throwable t) {
427                trace(msg, t);
428        }
429
430        @Override
431        public void trace(Marker marker, String format, Object arg1, Object arg2) {
432                trace(format, arg1, arg2);
433        }
434
435        @Override
436        public void warn(Marker marker, String msg) {
437                warn(msg);
438        }
439
440        @Override
441        public void warn(Marker marker, String format, Object arg) {
442                warn(format, arg);
443        }
444
445        @Override
446        public void warn(Marker marker, String format, Object[] argArray) {
447                warn(format, argArray);
448        }
449
450        @Override
451        public void warn(Marker marker, String msg, Throwable t) {
452                warn(msg, t);
453        }
454
455        @Override
456        public void warn(Marker marker, String format, Object arg1, Object arg2) {
457                warn(format, arg1, arg2);
458        }
459
460        @Override
461        public String getName() {
462                return name;
463        }
464
465        /**
466         * for felix logger.
467         */
468
469        @Override
470        protected void doLog(ServiceReference sr, int level, String msg, Throwable throwable) {
471                internalLog(level, msg, throwable);
472        }
473}
Note: See TracBrowser for help on using the browser.