X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Futil%2FLog.java;h=6b42ea21027560014dd39a443f835a7089b759c4;hb=ded3134be3462ef377baa59fad9267e93c2232cb;hp=7b3a0d72cf4ff8b02bd34f3658d15e1976b47f08;hpb=d2efb650e21d8880880ceff82ebde0aaf3027253;p=org.ibex.util.git diff --git a/src/org/ibex/util/Log.java b/src/org/ibex/util/Log.java index 7b3a0d7..6b42ea2 100644 --- a/src/org/ibex/util/Log.java +++ b/src/org/ibex/util/Log.java @@ -1,27 +1,43 @@ -// Copyright (C) 2003 Adam Megacz all rights reserved. -// -// You may modify, copy, and redistribute this code under the terms of -// the GNU Library Public License version 2.1, with the exception of -// the portion of clause 6a after the semicolon (aka the "obnoxious -// relink clause") +// Copyright 2000-2005 the Contributors, as shown in the revision logs. +// Licensed under the Apache Public Source License 2.0 ("the License"). +// You may not use this file except in compliance with the License. package org.ibex.util; -import org.ibex.js.*; -import java.io.*; + import java.util.*; -import java.net.*; -/** easy to use logger */ +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.io.PrintWriter; +import java.io.FileOutputStream; +import java.io.InputStreamReader; +import java.io.IOException; +import java.net.Socket; +import java.net.InetAddress; +import java.text.SimpleDateFormat; + +// FEATURE: logging exceptions should automatically unwrap exceptions + +/** Easy to use logger. + * + * @author adam@ibex.org + */ public class Log { + private static final SimpleDateFormat formatDate = new SimpleDateFormat("EEE dd MMM yyyy"); + private static final SimpleDateFormat formatTime = new SimpleDateFormat("[EEE HH:mm:ss] "); + private static final Hashtable threadAnnotations = new Hashtable(); public static boolean on = System.getProperty("ibex.log.on", "true").equals("true"); public static boolean color = System.getProperty("ibex.log.color", "true").equals("true"); public static boolean verbose = System.getProperty("ibex.log.verbose", "false").equals("true"); public static boolean logDates = System.getProperty("ibex.log.dates", "false").equals("true"); public static boolean notes = System.getProperty("ibex.log.notes.on", "true").equals("true"); + public static boolean stackTraces = System.getProperty("ibex.log.stackTraces", "true").equals("true"); public static int maximumNoteLength = Integer.parseInt(System.getProperty("ibex.log.notes.maximumLength", (1024 * 32)+"")); public static boolean rpc = false; - public static Date lastDate = null; + public static int lastDay = -1; public static PrintStream logstream = System.err; @@ -36,7 +52,6 @@ public class Log { logstream = new PrintStream(new Socket(InetAddress.getByName(host), port).getOutputStream()); } - private static Hashtable threadAnnotations = new Hashtable(); public static void setThreadAnnotation(String s) { threadAnnotations.put(Thread.currentThread(), s); } /** @@ -56,7 +71,8 @@ public class Log { } } public static void clearnotes() { if (!notes) return; notebuf().setLength(0); } - private static Hashtable notebufs = new Hashtable(); + + private static final Basket.Map notebufs = new Basket.Hash(); public static StringBuffer notebuf() { StringBuffer ret = (StringBuffer)notebufs.get(Thread.currentThread()); if (ret == null) { @@ -124,7 +140,8 @@ public class Log { } String classname; - if (o instanceof Class) { + if (o == null) classname = ""; + else if (o instanceof Class) { classname = ((Class)o).getName(); if (classname.indexOf('.') != -1) classname = classname.substring(classname.lastIndexOf('.') + 1); } @@ -141,15 +158,14 @@ public class Log { classname = classname.replace('$', '.'); if (logDates) { - Date d = new Date(); - if (lastDate == null || d.getYear() != lastDate.getYear() || d.getMonth() != lastDate.getMonth() || d.getDay() != lastDate.getDay()) { - String now = new java.text.SimpleDateFormat("EEE dd MMM yyyy").format(d); + Calendar cal = Calendar.getInstance(); + if (lastDay < 0 || lastDay != cal.get(Calendar.DAY_OF_YEAR)) { + lastDay = cal.get(Calendar.DAY_OF_YEAR); + String now = formatDate.format(cal.getTime()); logstream.println(); - logstream.println(colorize(GRAY, false, "=== " + now + " ==========================================================")); + logstream.println(colorize(GREEN, false, "=== " + now + " ==========================================================")); } - java.text.DateFormat df = new java.text.SimpleDateFormat("[EEE HH:mm:ss] "); - classname = df.format(d) + classname; - lastDate = d; + classname = formatTime.format(cal.getTime()) + classname; } String annot = (String)threadAnnotations.get(Thread.currentThread()); @@ -169,16 +185,34 @@ public class Log { } byte[] b = baos.toByteArray(); BufferedReader br = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(b))); - String s = null; try { - String m = ""; - while((s = br.readLine()) != null) m += s + "\n"; - if (m.length() > 0) log(o, m.substring(0, m.length() - 1), level); + if (stackTraces) { + String s = null; + String m = ""; + while((s = br.readLine()) != null) m += s + "\n"; + if (m.length() > 0) log(o, m.substring(0, m.length() - 1), level); + } else { + String m = br.readLine(); + int ok = 0; + do { + String s = br.readLine(); + if (s == null) break; + if (s.indexOf('(') != -1) { + String shortened = s.substring(s.indexOf('(')+1); + shortened = shortened.substring(0, shortened.indexOf(')')); + m += " " + shortened; + if (ok > 1) m = m.substring(0, Math.min(m.length(), 78)); + ok++; + } + } while (m.length() < 78); + log(o, m, level); + } + lastClassName = ""; } catch (IOException e) { // FEATURE: use org.ibex.io.Stream's here - logstream.println(colorize(RED, true, "Logger: exception thrown by ByteArrayInputStream; this should not happen")); + logstream.println(colorize(RED, true, "Logger: exception thrown by ByteArrayInputStream;" + + " this should not happen")); } - lastClassName = ""; return; } @@ -208,33 +242,4 @@ public class Log { logstream.println(classname + colorize(levelcolor, bright, str)); } - public static void recursiveLog(String indent, String name, Object o) throws JSExn { - if (!name.equals("")) name += " : "; - - if (o == null) { - JS.log(indent + name + ""); - - } else if (o instanceof JSArray) { - JS.log(indent + name + ""); - JSArray na = (JSArray)o; - for(int i=0; i"); - JS s = (JS)o; - Enumeration e = s.keys(); - while(e.hasMoreElements()) { - Object key = e.nextElement(); - if (key != null) - recursiveLog(indent + " ", key.toString(), - (key instanceof Integer) ? - s.get(((Integer)key)) : s.get(key.toString())); - } - } else { - JS.log(indent + name + o); - - } - } - }