mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-17 18:17:43 +00:00
Merge pull request #1123 from rcordovano/logger_thread_safety
Logger thread safety
This commit is contained in:
commit
f81d9070a6
@ -226,6 +226,7 @@ public class Case implements SleuthkitCase.ErrorObserver {
|
|||||||
if (newCase != null) {
|
if (newCase != null) {
|
||||||
currentCase = newCase;
|
currentCase = newCase;
|
||||||
|
|
||||||
|
Logger.setLogDirectory(currentCase.getLogDirectoryPath());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
pcs.firePropertyChange(Events.CURRENT_CASE.toString(), null, currentCase);
|
pcs.firePropertyChange(Events.CURRENT_CASE.toString(), null, currentCase);
|
||||||
@ -253,6 +254,8 @@ public class Case implements SleuthkitCase.ErrorObserver {
|
|||||||
doCaseNameChange(currentCase.name);
|
doCaseNameChange(currentCase.name);
|
||||||
|
|
||||||
RecentCases.getInstance().addRecentCase(currentCase.name, currentCase.configFilePath); // update the recent cases
|
RecentCases.getInstance().addRecentCase(currentCase.name, currentCase.configFilePath); // update the recent cases
|
||||||
|
} else {
|
||||||
|
Logger.setLogDirectory(PlatformUtil.getLogDirectory());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,8 +18,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.sleuthkit.autopsy.coreutils;
|
package org.sleuthkit.autopsy.coreutils;
|
||||||
|
|
||||||
import java.beans.PropertyChangeEvent;
|
|
||||||
import java.beans.PropertyChangeListener;
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.logging.FileHandler;
|
import java.util.logging.FileHandler;
|
||||||
@ -28,7 +26,6 @@ import java.util.logging.Handler;
|
|||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.logging.LogRecord;
|
import java.util.logging.LogRecord;
|
||||||
import org.sleuthkit.autopsy.casemodule.Case;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Autopsy specialization of the Java Logger class with custom file handlers.
|
* Autopsy specialization of the Java Logger class with custom file handlers.
|
||||||
@ -40,40 +37,11 @@ public final class Logger extends java.util.logging.Logger {
|
|||||||
private static final int LOG_FILE_COUNT = 10;
|
private static final int LOG_FILE_COUNT = 10;
|
||||||
private static final String LOG_WITHOUT_STACK_TRACES = "autopsy.log"; //NON-NLS
|
private static final String LOG_WITHOUT_STACK_TRACES = "autopsy.log"; //NON-NLS
|
||||||
private static final String LOG_WITH_STACK_TRACES = "autopsy_traces.log"; //NON-NLS
|
private static final String LOG_WITH_STACK_TRACES = "autopsy_traces.log"; //NON-NLS
|
||||||
private static final CaseChangeListener caseChangeListener = new CaseChangeListener();
|
|
||||||
private static final Handler console = new java.util.logging.ConsoleHandler();
|
private static final Handler console = new java.util.logging.ConsoleHandler();
|
||||||
|
private static final Object fileHandlerLock = new Object();
|
||||||
private static FileHandler userFriendlyLogFile = createFileHandler(PlatformUtil.getLogDirectory(), LOG_WITHOUT_STACK_TRACES);
|
private static FileHandler userFriendlyLogFile = createFileHandler(PlatformUtil.getLogDirectory(), LOG_WITHOUT_STACK_TRACES);
|
||||||
private static FileHandler developersLogFile = createFileHandler(PlatformUtil.getLogDirectory(), LOG_WITH_STACK_TRACES);
|
private static FileHandler developersLogFile = createFileHandler(PlatformUtil.getLogDirectory(), LOG_WITH_STACK_TRACES);
|
||||||
|
|
||||||
static {
|
|
||||||
Case.addPropertyChangeListener(caseChangeListener);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class CaseChangeListener implements PropertyChangeListener {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void propertyChange(PropertyChangeEvent event) {
|
|
||||||
if (event.getPropertyName().equals(Case.Events.CURRENT_CASE.toString())) {
|
|
||||||
// Write to logs in the Logs directory of the current case, or
|
|
||||||
// to logs in the user directory when there is no case.
|
|
||||||
if (event.getNewValue() != null) {
|
|
||||||
String logDirectoryPath = ((Case) event.getNewValue()).getLogDirectoryPath();
|
|
||||||
if (!logDirectoryPath.isEmpty()) {
|
|
||||||
userFriendlyLogFile.close();
|
|
||||||
userFriendlyLogFile = createFileHandler(logDirectoryPath, LOG_WITHOUT_STACK_TRACES);
|
|
||||||
developersLogFile.close();
|
|
||||||
developersLogFile = createFileHandler(logDirectoryPath, LOG_WITH_STACK_TRACES);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
userFriendlyLogFile.close();
|
|
||||||
userFriendlyLogFile = createFileHandler(PlatformUtil.getLogDirectory(), LOG_WITHOUT_STACK_TRACES);
|
|
||||||
developersLogFile.close();
|
|
||||||
developersLogFile = createFileHandler(PlatformUtil.getLogDirectory(), LOG_WITH_STACK_TRACES);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static FileHandler createFileHandler(String logDirectory, String fileName) {
|
private static FileHandler createFileHandler(String logDirectory, String fileName) {
|
||||||
try {
|
try {
|
||||||
FileHandler f = new FileHandler(logDirectory + File.separator + fileName, LOG_SIZE, LOG_FILE_COUNT);
|
FileHandler f = new FileHandler(logDirectory + File.separator + fileName, LOG_SIZE, LOG_FILE_COUNT);
|
||||||
@ -83,36 +51,8 @@ public final class Logger extends java.util.logging.Logger {
|
|||||||
f.setFormatter(new Formatter() {
|
f.setFormatter(new Formatter() {
|
||||||
@Override
|
@Override
|
||||||
public String format(LogRecord record) {
|
public String format(LogRecord record) {
|
||||||
return (new Date(record.getMillis())).toString() + " "
|
synchronized (fileHandlerLock) {
|
||||||
+ record.getSourceClassName() + " "
|
return (new Date(record.getMillis())).toString() + " "
|
||||||
+ record.getSourceMethodName() + "\n"
|
|
||||||
+ record.getLevel() + ": "
|
|
||||||
+ this.formatMessage(record) + "\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.getSourceClassName() + " "
|
|
||||||
+ record.getSourceMethodName() + "\n"
|
|
||||||
+ record.getLevel() + ": "
|
|
||||||
+ this.formatMessage(record) + "\n"
|
|
||||||
+ record.getThrown().toString() + ": "
|
|
||||||
+ StackTrace
|
|
||||||
+ "\n";
|
|
||||||
} else {
|
|
||||||
return (new Timestamp(record.getMillis())).toString() + " "
|
|
||||||
+ record.getSourceClassName() + " "
|
+ record.getSourceClassName() + " "
|
||||||
+ record.getSourceMethodName() + "\n"
|
+ record.getSourceMethodName() + "\n"
|
||||||
+ record.getLevel() + ": "
|
+ record.getLevel() + ": "
|
||||||
@ -121,6 +61,38 @@ public final class Logger extends java.util.logging.Logger {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
case LOG_WITH_STACK_TRACES:
|
||||||
|
f.setFormatter(new Formatter() {
|
||||||
|
@Override
|
||||||
|
public String format(LogRecord record) {
|
||||||
|
synchronized (fileHandlerLock) {
|
||||||
|
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.getSourceClassName() + " "
|
||||||
|
+ record.getSourceMethodName() + "\n"
|
||||||
|
+ record.getLevel() + ": "
|
||||||
|
+ this.formatMessage(record) + "\n"
|
||||||
|
+ record.getThrown().toString() + ": "
|
||||||
|
+ StackTrace
|
||||||
|
+ "\n";
|
||||||
|
} else {
|
||||||
|
return (new Timestamp(record.getMillis())).toString() + " "
|
||||||
|
+ record.getSourceClassName() + " "
|
||||||
|
+ record.getSourceMethodName() + "\n"
|
||||||
|
+ record.getLevel() + ": "
|
||||||
|
+ this.formatMessage(record) + "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return f;
|
return f;
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
@ -128,6 +100,25 @@ public final class Logger extends java.util.logging.Logger {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the log directory where the log files will be written.
|
||||||
|
*
|
||||||
|
* @param directoryPath The path to the desired log directory as a string.
|
||||||
|
*/
|
||||||
|
public static void setLogDirectory(String directoryPath) {
|
||||||
|
if (null != directoryPath && !directoryPath.isEmpty()) {
|
||||||
|
File directory = new File(directoryPath);
|
||||||
|
if (directory.exists() && directory.canWrite()) {
|
||||||
|
synchronized (fileHandlerLock) {
|
||||||
|
userFriendlyLogFile.close();
|
||||||
|
userFriendlyLogFile = createFileHandler(directoryPath, LOG_WITHOUT_STACK_TRACES);
|
||||||
|
developersLogFile.close();
|
||||||
|
developersLogFile = createFileHandler(directoryPath, LOG_WITH_STACK_TRACES);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Factory method to retrieve a org.sleuthkit.autopsy.coreutils.Logger
|
* Factory method to retrieve a org.sleuthkit.autopsy.coreutils.Logger
|
||||||
* instance derived from java.util.logging.Logger. Hides the base class
|
* instance derived from java.util.logging.Logger. Hides the base class
|
||||||
@ -162,8 +153,10 @@ public final class Logger extends java.util.logging.Logger {
|
|||||||
if (Version.getBuildType() == Version.Type.DEVELOPMENT) {
|
if (Version.getBuildType() == Version.Type.DEVELOPMENT) {
|
||||||
super.addHandler(console);
|
super.addHandler(console);
|
||||||
}
|
}
|
||||||
super.setUseParentHandlers(false);
|
synchronized (fileHandlerLock) {
|
||||||
super.addHandler(userFriendlyLogFile);
|
super.setUseParentHandlers(false);
|
||||||
super.addHandler(developersLogFile);
|
super.addHandler(userFriendlyLogFile);
|
||||||
|
super.addHandler(developersLogFile);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user