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 package org.archive.util;
26
27 import java.io.PrintWriter;
28 import java.io.StringWriter;
29 import java.text.FieldPosition;
30 import java.text.SimpleDateFormat;
31 import java.util.Date;
32 import java.util.logging.ConsoleHandler;
33 import java.util.logging.Handler;
34 import java.util.logging.Level;
35 import java.util.logging.LogRecord;
36 import java.util.logging.Logger;
37 import java.util.logging.SimpleFormatter;
38
39
40
41 /***
42 * Logger that writes entry on one line with less verbose date.
43 *
44 * @author stack
45 * @version $Revision: 6329 $, $Date: 2009-06-05 00:51:53 +0000 (Fri, 05 Jun 2009) $
46 */
47 public class OneLineSimpleLogger extends SimpleFormatter {
48
49 /***
50 * Date instance.
51 *
52 * Keep around instance of date.
53 */
54 private Date date = new Date();
55
56 /***
57 * Field position instance.
58 *
59 * Keep around this instance.
60 */
61 private FieldPosition position = new FieldPosition(0);
62
63 /***
64 * MessageFormatter for date.
65 */
66 private SimpleDateFormat formatter =
67 new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
68
69 /***
70 * Persistent buffer in which we conjure the log.
71 */
72 private StringBuffer buffer = new StringBuffer();
73
74
75 public OneLineSimpleLogger() {
76 super();
77 }
78
79 public synchronized String format(LogRecord record) {
80 this.buffer.setLength(0);
81 this.date.setTime(record.getMillis());
82 this.position.setBeginIndex(0);
83 this.formatter.format(this.date, buffer, this.position);
84 buffer.append(' ');
85 buffer.append(record.getLevel().getLocalizedName());
86 buffer.append(" thread-");
87 buffer.append(record.getThreadID());
88 buffer.append(' ');
89 if (record.getSourceClassName() != null) {
90 buffer.append(record.getSourceClassName());
91 } else {
92 buffer.append(record.getLoggerName());
93 }
94 buffer.append('.');
95 String methodName = record.getSourceMethodName();
96 methodName = (methodName == null || methodName.length() <= 0)?
97 "-": methodName;
98 buffer.append(methodName);
99 buffer.append("() ");
100 buffer.append(formatMessage(record));
101 buffer.append(System.getProperty("line.separator"));
102 if (record.getThrown() != null) {
103 try {
104 StringWriter writer = new StringWriter();
105 PrintWriter printer = new PrintWriter(writer);
106 record.getThrown().printStackTrace(printer);
107 writer.close();
108 buffer.append(writer.toString());
109 } catch (Exception e) {
110 buffer.append("Failed to get stack trace: " + e.getMessage());
111 }
112 }
113 return buffer.toString();
114 }
115
116 public static Logger setConsoleHandler() {
117 Logger logger = Logger.getLogger("");
118 Handler [] hs = logger.getHandlers();
119 for (int i = 0; i < hs.length; i++) {
120 Handler h = hs[0];
121 if (h instanceof ConsoleHandler) {
122 h.setFormatter(new OneLineSimpleLogger());
123 }
124 }
125 return logger;
126 }
127
128 /***
129 * Test this logger.
130 */
131 public static void main(String[] args) {
132 Logger logger = setConsoleHandler();
133 logger = Logger.getLogger("Test");
134 logger.severe("Does this come out?");
135 logger.severe("Does this come out?");
136 logger.severe("Does this come out?");
137 logger.log(Level.SEVERE, "hello", new RuntimeException("test"));
138 }
139 }