| 4 | import java.util.logging.Logger; |
| 5 | |
| 6 | public class Logging { |
| 7 | private static final Logger log = Logger.getLogger("Logging"); |
| 8 | |
| 9 | private static class MyHandler extends Handler { |
| 10 | private static final int NAME_WIDTH = 18; |
| 11 | private static final int METHOD_WIDTH = 20; |
| 12 | private static final int LEVEL_WIDTH = 8; |
| 13 | |
| 14 | public Object clone() { return this; } |
| 15 | public void close() { } |
| 16 | public void flush() { } |
| 17 | |
| 18 | private void maybeLogThrown(StringBuilder sb, Throwable t) { |
| 19 | if (t != null) { |
| 20 | sb.append("\nCaused by: "); |
| 21 | sb.append(t.getClass().getName()); |
| 22 | sb.append(": "); |
| 23 | sb.append(t.getMessage()); |
| 24 | sb.append('\n'); |
| 25 | |
| 26 | for (StackTraceElement elt : t.getStackTrace()) { |
| 27 | sb.append('\t'); |
| 28 | sb.append(elt.getClassName()); |
| 29 | sb.append('.'); |
| 30 | sb.append(elt.getMethodName()); |
| 31 | sb.append('('); |
| 32 | sb.append(elt.getFileName()); |
| 33 | sb.append(':'); |
| 34 | sb.append(elt.getLineNumber()); |
| 35 | sb.append(')'); |
| 36 | sb.append('\n'); |
| 37 | } |
| 38 | maybeLogThrown(sb, t.getCause()); |
| 39 | } |
| 40 | } |
| 41 | |
| 42 | private void indent(StringBuilder sb, int amount) { |
| 43 | do { |
| 44 | sb.append(' '); |
| 45 | } while (--amount > 0); |
| 46 | } |
| 47 | |
| 48 | public void publish(LogRecord r) { |
| 49 | StringBuilder sb = new StringBuilder(); |
| 50 | sb.append(r.getLoggerName()); |
| 51 | indent(sb, NAME_WIDTH - r.getLoggerName().length()); |
| 52 | String methodName = r.getSourceMethodName(); |
| 53 | if (methodName == null) { |
| 54 | methodName = "<unknown>"; |
| 55 | } |
| 56 | sb.append(methodName); |
| 57 | indent(sb, METHOD_WIDTH - methodName.length()); |
| 58 | sb.append(r.getLevel().getName()); |
| 59 | indent(sb, LEVEL_WIDTH - r.getLevel().getName().length()); |
| 60 | sb.append(r.getMessage()); |
| 61 | maybeLogThrown(sb, r.getThrown()); |
| 62 | System.out.println(sb.toString()); |
| 63 | } |