From 26de9c334dbd26cba03d47205d4ffbe9b24942af Mon Sep 17 00:00:00 2001 From: Eric Scharff Date: Thu, 27 Sep 2007 12:42:06 -0600 Subject: [PATCH] Add a default logging handler, in case the user doesn't provide any. --- classpath/java/util/logging/Logger.java | 61 ++++++++++++++++++++++++- test/Logging.java | 12 +++-- 2 files changed, 67 insertions(+), 6 deletions(-) diff --git a/classpath/java/util/logging/Logger.java b/classpath/java/util/logging/Logger.java index e0635ee520..76295efaae 100644 --- a/classpath/java/util/logging/Logger.java +++ b/classpath/java/util/logging/Logger.java @@ -6,7 +6,11 @@ import java.util.List; public class Logger { private final String name; - private static final ArrayList handlers = new ArrayList(); + private static final ArrayList handlers; + static { + handlers = new ArrayList(); + handlers.add(new DefaultHandler()); + } public static Logger getLogger(String name) { return new Logger(name); @@ -17,7 +21,7 @@ public class Logger { } public List getHandlers() { - return handlers; + return new ArrayList(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()); + } + } + } diff --git a/test/Logging.java b/test/Logging.java index 6805e43f2b..c6b2073366 100644 --- a/test/Logging.java +++ b/test/Logging.java @@ -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(); }