diff --git a/Core/src/org/sleuthkit/autopsy/core/Installer.java b/Core/src/org/sleuthkit/autopsy/core/Installer.java index 225db9928b..25a71e5988 100644 --- a/Core/src/org/sleuthkit/autopsy/core/Installer.java +++ b/Core/src/org/sleuthkit/autopsy/core/Installer.java @@ -21,6 +21,7 @@ package org.sleuthkit.autopsy.core; import java.io.File; import java.util.ArrayList; import java.util.List; +import java.util.logging.Handler; import java.util.logging.Level; import javafx.application.Platform; import javafx.embed.swing.JFXPanel; @@ -199,5 +200,8 @@ public class Installer extends ModuleInstall { logger.log(Level.WARNING, "", e); } } + for (Handler h : logger.getHandlers()) { + h.close(); //must call h.close or a .LCK file will remain. + } } } diff --git a/Core/src/org/sleuthkit/autopsy/coreutils/Logger.java b/Core/src/org/sleuthkit/autopsy/coreutils/Logger.java index 2e2e9f0363..b531e203e4 100644 --- a/Core/src/org/sleuthkit/autopsy/coreutils/Logger.java +++ b/Core/src/org/sleuthkit/autopsy/coreutils/Logger.java @@ -23,9 +23,11 @@ import java.beans.PropertyChangeListener; import java.io.File; import java.io.IOException; import java.util.logging.FileHandler; +import java.util.logging.Formatter; import java.util.logging.Handler; -import java.util.logging.Level; -import java.util.logging.SimpleFormatter; +import java.sql.Timestamp; +import java.util.Date; +import java.util.logging.LogRecord; import org.sleuthkit.autopsy.casemodule.Case; /** @@ -76,7 +78,51 @@ public final class Logger extends java.util.logging.Logger { try { FileHandler f = new FileHandler(logDirectory + File.separator + fileName, LOG_SIZE, LOG_FILE_COUNT); f.setEncoding(LOG_ENCODING); - f.setFormatter(new SimpleFormatter()); + switch (fileName) { + case LOG_WITHOUT_STACK_TRACES: + f.setFormatter(new Formatter() { + @Override + public String format(LogRecord record) { + return (new Date(record.getMillis())).toString() + " : " + + record.getLevel() + ": " + + record.getSourceClassName() + " " + + record.getSourceMethodName() + ": " + + record.getMessage() + "\n"; + } + }); + break; + case LOG_WITH_STACK_TRACES: + f.setFormatter(new Formatter() { + @Override + public String format(LogRecord record) { + if (record.getThrown() != null) { + + StackTraceElement ele[] = record.getThrown().getStackTrace(); + String StackTrace = ""; + for (StackTraceElement ele1 : ele) { + StackTrace += "\t" + ele1.toString() + "\n"; + } + + return (new Timestamp(record.getMillis())).toString() + " : " + + record.getLevel() + ": " + + record.getSourceClassName() + " " + + record.getSourceMethodName() + ": " + + record.getMessage() + " " + + record.getThrown().toString() + ": " + + StackTrace + + "\n"; + } else { + return (new Timestamp(record.getMillis())).toString() + " : " + + record.getLevel() + ": " + + record.getSourceClassName() + " " + + record.getSourceMethodName() + ": " + + record.getMessage() + " " + + "\n"; + } + } + }); + break; + } return f; } catch (IOException e) { throw new RuntimeException("Error initializing " + fileName + " file handler", e); //NON-NLS @@ -93,7 +139,7 @@ public final class Logger extends java.util.logging.Logger { * @return org.sleuthkit.autopsy.coreutils.Logger instance */ public static Logger getLogger(String name) { - return new Logger(java.util.logging.Logger.getLogger(name)); + return new Logger(name, null); } /** @@ -109,46 +155,16 @@ public final class Logger extends java.util.logging.Logger { * @return org.sleuthkit.autopsy.coreutils.Logger instance */ public static Logger getLogger(String name, String resourceBundleName) { - return new Logger(java.util.logging.Logger.getLogger(name, resourceBundleName)); + return new Logger(name, resourceBundleName); } - private Logger(java.util.logging.Logger log) { - super(log.getName(), log.getResourceBundleName()); + private Logger(String name, String resourceBundleName) { + super(name, resourceBundleName); if (Version.getBuildType() == Version.Type.DEVELOPMENT) { - addHandler(console); + super.addHandler(console); } - setUseParentHandlers(false); - addHandler(userFriendlyLogFile); - addHandler(developersLogFile); - } - - @Override - public void log(Level level, String message, Throwable thrown) { - logUserFriendlyOnly(level, message, thrown); - removeHandler(userFriendlyLogFile); - super.log(level, message, thrown); - addHandler(userFriendlyLogFile); - } - - @Override - public void logp(Level level, String sourceClass, String sourceMethod, String message, Throwable thrown) { - logUserFriendlyOnly(level, message, thrown); - removeHandler(userFriendlyLogFile); - super.logp(level, sourceClass, sourceMethod, message, thrown); - addHandler(userFriendlyLogFile); - } - - - private void logUserFriendlyOnly(Level level, String message, Throwable thrown) { - removeHandler(developersLogFile); - super.log(level, "{0}\nException: {1}", new Object[]{message, thrown.toString()}); //NON-NLS - addHandler(developersLogFile); - } - - @Override - public void throwing(String sourceClass, String sourceMethod, Throwable thrown) { - removeHandler(userFriendlyLogFile); - super.throwing(sourceClass, sourceMethod, thrown); - addHandler(userFriendlyLogFile); + super.setUseParentHandlers(false); + super.addHandler(userFriendlyLogFile); + super.addHandler(developersLogFile); } }