Add a default logging handler, in case the user doesn't provide any.

This commit is contained in:
Eric Scharff 2007-09-27 12:42:06 -06:00
parent f1bdc4c745
commit 26de9c334d
2 changed files with 67 additions and 6 deletions

View File

@ -6,7 +6,11 @@ import java.util.List;
public class Logger {
private final String name;
private static final ArrayList<Handler> handlers = new ArrayList<Handler>();
private static final ArrayList<Handler> handlers;
static {
handlers = new ArrayList<Handler>();
handlers.add(new DefaultHandler());
}
public static Logger getLogger(String name) {
return new Logger(name);
@ -17,7 +21,7 @@ public class Logger {
}
public List<Handler> getHandlers() {
return handlers;
return new ArrayList<Handler>(handlers);
}
public void addHandler(Handler handler) {
@ -64,4 +68,57 @@ public class Logger {
public void setLevel(Level level) {
// Currently ignored
}
private static class DefaultHandler extends Handler {
private static final int NAME_WIDTH = 18;
private static final int METHOD_WIDTH = 20;
private static final int LEVEL_WIDTH = 8;
public Object clone() { return this; }
public void close() { }
public void flush() { }
private void maybeLogThrown(StringBuilder sb, Throwable t) {
if (t != null) {
sb.append("\nCaused by: ");
sb.append(t.getClass().getName());
sb.append(": ");
sb.append(t.getMessage());
sb.append('\n');
for (StackTraceElement elt : t.getStackTrace()) {
sb.append('\t');
sb.append(elt.getClassName());
sb.append('.');
sb.append(elt.getMethodName());
sb.append("(line");
sb.append(':');
sb.append(elt.getLineNumber());
sb.append(')');
sb.append('\n');
}
maybeLogThrown(sb, t.getCause());
}
}
private void indent(StringBuilder sb, int amount) {
do {
sb.append(' ');
} while (--amount > 0);
}
public void publish(LogRecord r) {
StringBuilder sb = new StringBuilder();
sb.append(r.getLoggerName());
indent(sb, NAME_WIDTH - r.getLoggerName().length());
sb.append(r.getSourceMethodName());
indent(sb, METHOD_WIDTH - r.getSourceMethodName().length());
sb.append(r.getLevel().getName());
indent(sb, LEVEL_WIDTH - r.getLevel().getName().length());
sb.append(r.getMessage());
maybeLogThrown(sb, r.getThrown());
System.out.println(sb.toString());
}
}
}

View File

@ -92,11 +92,15 @@ public class Logging {
throw new Exception("Started here");
}
private static final boolean useCustomHandler = true;
public static void main(String args[]) {
Logger root = Logger.getLogger("");
root.addHandler(new MyHandler());
for (Handler h : root.getHandlers()) root.removeHandler(h);
root.addHandler(new MyHandler());
if (useCustomHandler) {
Logger root = Logger.getLogger("");
root.addHandler(new MyHandler());
for (Handler h : root.getHandlers()) root.removeHandler(h);
root.addHandler(new MyHandler());
}
Logging me = new Logging();
me.run();
}