View Javadoc

1   /* OneLineSimpleLogger
2    * 
3    * $Id: OneLineSimpleLogger.java 6329 2009-06-05 00:51:53Z nlevitt $
4    * 
5    * Created on Jul 22, 2004
6    *
7    * Copyright (C) 2004 Internet Archive.
8    * 
9    * This file is part of the Heritrix web crawler (crawler.archive.org).
10   * 
11   * Heritrix is free software; you can redistribute it and/or modify
12   * it under the terms of the GNU Lesser Public License as published by
13   * the Free Software Foundation; either version 2.1 of the License, or
14   * any later version.
15   * 
16   * Heritrix is distributed in the hope that it will be useful, 
17   * but WITHOUT ANY WARRANTY; without even the implied warranty of
18   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19   * GNU Lesser Public License for more details.
20   * 
21   * You should have received a copy of the GNU Lesser Public License
22   * along with Heritrix; if not, write to the Free Software
23   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
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 }