/** true iff nothing has yet been logged */
public static boolean firstMessage = true;
- /** log a message with the current JavaScript sourceName/line */
- public static void logJS(Object o, Object message) { logJS(message); }
- public static void logJS(Object message) { log(JS.getSourceName() + ":" + JS.getLine(), message); }
-
/** message can be a String or a Throwable */
- public static synchronized void log(Object o, Object message) {
- log(o, message, INFO);
- }
+ public static synchronized void echo(Object o, Object message) { log(o, message, ECHO); }
+ public static synchronized void diag(Object o, Object message) { log(o, message, DIAGNOSTIC); }
+ public static synchronized void debug(Object o, Object message) { log(o, message, DEBUG); }
+ public static synchronized void info(Object o, Object message) { log(o, message, INFO); }
+ public static synchronized void warn(Object o, Object message) { log(o, message, WARN); }
+ public static synchronized void error(Object o, Object message) { log(o, message, ERROR); }
// these two logging levels serve ONLY to change the color; semantically they are the same as DEBUG
private static final int DIAGNOSTIC = -2;
private static final int GRAY = 37;
private static String color(int color, boolean bright, String s) {
+ if (!Log.color) return s;
return
"" + ((char)27) + "[" + (bright?1:0) + ";" + color + "m" +
s +
private static synchronized void log(Object o, Object message, int level) {
if (firstMessage && !logDates) {
firstMessage = false;
- System.err.println("===========================================================================");
- String incolor = color ? "in " +
+ System.err.println(color(GREEN, false, "==========================================================================="));
+ diag(Log.class, "Logging enabled at " + new java.util.Date());
+ if (color) diag(Log.class, "logging messages in " +
color(BLUE, true, "c") +
color(RED, true, "o") +
color(CYAN, true, "l") +
color(GREEN, true, "o") +
- color(PURPLE, true, "r") + " " : "";
- log(Log.class, "Logging enabled at " + new java.util.Date() + " " + incolor);
+ color(PURPLE, true, "r"));
}
String classname;
while (classname.length() < (logDates ? 14 : 20)) classname = " " + classname;
classname = classname + (classname.trim().length() == 0 ? " " : ": ");
classname = color(GRAY, true, classname);
+ classname = classname.replace('$', '.');
if (logDates) {
Date d = new Date();
try {
String m = "";
while((s = br.readLine()) != null) m += s + "\n";
- log(o, m, level);
+ log(o, m.substring(0, m.length() - 1), level);
} catch (IOException e) {
System.err.println(color(RED, true, "Logger: exception thrown by ByteArrayInputStream -- this should not happen"));
}
if (!name.equals("")) name += " : ";
if (o == null) {
- Log.logJS(indent + name + "<null>");
+ JS.log(indent + name + "<null>");
} else if (o instanceof JSArray) {
- Log.logJS(indent + name + "<array>");
+ JS.log(indent + name + "<array>");
JSArray na = (JSArray)o;
for(int i=0; i<na.length(); i++)
recursiveLog(indent + " ", i + "", na.elementAt(i));
} else if (o instanceof JS) {
- Log.logJS(indent + name + "<object>");
+ JS.log(indent + name + "<object>");
JS s = (JS)o;
Enumeration e = s.keys();
while(e.hasMoreElements()) {
s.get(((Integer)key)) : s.get(key.toString()));
}
} else {
- Log.logJS(indent + name + o);
+ JS.log(indent + name + o);
}
}