2002/03/21 01:19:34
[org.ibex.core.git] / src / org / xwt / util / Log.java
1 // Copyright 2002 Adam Megacz, see the COPYING file for licensing [LGPL]
2 package org.xwt.util;
3 import java.io.*;
4
5 /** easy to use logger */
6 public class Log {
7
8     public static boolean on = true;
9     public static boolean verbose = false;
10
11     /** true iff nothing has yet been logged */
12     public static boolean firstMessage = true;
13
14     /** message can be a String or a Throwable */
15     public static synchronized void log(Object o, Object message) {
16
17         if (firstMessage) {
18             firstMessage = false;
19             System.err.println("===========================================================================");
20             log(Log.class, "Logging enabled at " + new java.util.Date());
21         }
22
23         String classname;
24         if (o instanceof Class) classname = ((Class)o).getName();
25         else if (o instanceof String) classname = (String)o;
26         else classname = o.getClass().getName();
27         
28         if (classname.indexOf('.') != -1) classname = classname.substring(classname.lastIndexOf('.') + 1);
29         if (classname.length() > 20) classname = classname.substring(0, 20);
30         while (classname.length() < 20) classname = " " + classname;
31         classname = classname + ": ";
32
33         if (!(message instanceof Throwable)) System.err.println(classname + message);
34         else {
35             ByteArrayOutputStream baos = new ByteArrayOutputStream();
36             ((Throwable)message).printStackTrace(new PrintStream(baos));
37             byte[] b = baos.toByteArray();
38             BufferedReader br = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(b)));
39             String s = null;
40             try {
41                 while((s = br.readLine()) != null) {
42                     System.err.print(classname);
43                     for(int i=0; i<s.length(); i++)
44                         System.err.print(s.charAt(i) == '\t' ? "    " : ("" + s.charAt(i)));
45                     System.err.println();
46                 }
47             } catch (Exception e) { }
48
49         }
50     }
51
52 }