X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fnet%2Fpterodactylus%2Futil%2Flogging%2FLogging.java;h=86a4a6ff934cd0f35f2753bbf57b95de4526f039;hb=c53cabb68760b1c34a4af847cd83117dcf76a755;hp=443c05d104911d5f6397e9a156c45c97845bb7c2;hpb=ee455fc59ab4cf41a7777c1ee8185e2ec14cb045;p=jSite2.git diff --git a/src/net/pterodactylus/util/logging/Logging.java b/src/net/pterodactylus/util/logging/Logging.java index 443c05d..86a4a6f 100644 --- a/src/net/pterodactylus/util/logging/Logging.java +++ b/src/net/pterodactylus/util/logging/Logging.java @@ -19,9 +19,14 @@ package net.pterodactylus.util.logging; +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; +import java.util.Date; import java.util.List; +import java.util.logging.ConsoleHandler; +import java.util.logging.Formatter; import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.LogRecord; @@ -31,13 +36,19 @@ import java.util.logging.Logger; * Sets up logging. * * @author David ‘Bombe’ Roden <bombe@freenetproject.org> - * @version $Id$ */ public class Logging { /** The log handler. */ private static final LogHandler logHandler = new LogHandler(); + static { + logHandler.setLevel(Level.ALL); + } + + /** The root name of the hierarchy. */ + private static String hierarchyRootName; + /** * Adds a listener to the log handler. * @@ -60,12 +71,68 @@ public class Logging { /** * Sets up logging and installs the log handler. + * + * @param hierarchyName + * The name of the hierarchy root logger */ - public static void setup() { - Logger rootLogger = Logger.getAnonymousLogger().getParent(); + public static void setup(String hierarchyName) { + hierarchyRootName = hierarchyName; + Logger rootLogger = Logger.getLogger(hierarchyName); rootLogger.addHandler(logHandler); + Handler consoleHandler = new ConsoleHandler(); + consoleHandler.setLevel(Level.ALL); + consoleHandler.setFormatter(new Formatter() { + + private StringBuffer recordBuffer = new StringBuffer(); + private DateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS Z"); + + /** + * {@inheritDoc} + */ + @Override + public synchronized String format(LogRecord record) { + recordBuffer.setLength(0); + String linePrefix = dateFormatter.format(new Date(record.getMillis())) + " [" + record.getLevel() + "] [" + Thread.currentThread().getName() + "] [" + record.getSourceClassName() + "." + record.getSourceMethodName() + "] "; + recordBuffer.append(linePrefix).append(record.getMessage()).append('\n'); + if (record.getThrown() != null) { + Throwable throwable = record.getThrown(); + boolean causedBy = false; + while (throwable != null) { + recordBuffer.append(linePrefix); + if (causedBy) { + recordBuffer.append("caused by: "); + } + recordBuffer.append(throwable.getClass().getName()); + if (throwable.getMessage() != null) { + recordBuffer.append(": ").append(throwable.getMessage()); + } + recordBuffer.append("\n"); + StackTraceElement[] stackTraceElements = throwable.getStackTrace(); + for (StackTraceElement stackTraceElement: stackTraceElements) { + recordBuffer.append(linePrefix).append(" at ").append(stackTraceElement.getClassName()).append('.').append(stackTraceElement.getMethodName()).append("(").append(stackTraceElement.getFileName()).append(':').append(stackTraceElement.getLineNumber()).append(')').append("\n"); + } + throwable = throwable.getCause(); + causedBy = true; + } + } + return recordBuffer.toString(); + } + }); + rootLogger.addHandler(consoleHandler); + rootLogger.setUseParentHandlers(false); rootLogger.setLevel(Level.ALL); - logHandler.setLevel(Level.INFO); + } + + /** + * Returns a named logger from the jSite hierarchy. + * + * @param name + * The name of the logger + * @return The logger + */ + public static Logger getLogger(String name) { + Logger logger = Logger.getLogger(hierarchyRootName + "." + name); + return logger; } /** @@ -74,7 +141,6 @@ public class Logging { * * @see LoggingListener * @author David ‘Bombe’ Roden <bombe@freenetproject.org> - * @version $Id$ */ private static class LogHandler extends Handler { @@ -82,6 +148,7 @@ public class Logging { * Package-private constructor. */ LogHandler() { + /* do nothing. */ } /** The list of the listeners. */ @@ -132,6 +199,7 @@ public class Logging { */ @Override public void close() throws SecurityException { + /* do nothing. */ } /** @@ -139,6 +207,7 @@ public class Logging { */ @Override public void flush() { + /* do nothing. */ } /**