19 package org.sleuthkit.autopsy.coreutils;
21 import java.io.IOException;
22 import java.nio.file.Paths;
23 import java.util.logging.FileHandler;
24 import java.util.logging.Formatter;
25 import java.util.logging.Handler;
26 import java.sql.Timestamp;
27 import java.util.Date;
28 import java.util.HashMap;
30 import java.util.logging.LogRecord;
44 private static final Handler
consoleHandler =
new java.util.logging.ConsoleHandler();
57 String logFilePath = Paths.get(logDirectory, LOG_WITHOUT_STACK_TRACES).toString();
59 FileHandler fileHandler =
new FileHandler(logFilePath, LOG_SIZE, LOG_FILE_COUNT);
60 fileHandler.setEncoding(LOG_ENCODING);
61 fileHandler.setFormatter(
new Formatter() {
63 public String format(LogRecord record) {
64 return (
new Date(record.getMillis())).toString() +
" "
65 + record.getSourceClassName() +
" "
66 + record.getSourceMethodName() +
"\n"
67 + record.getLevel() +
": "
68 + this.formatMessage(record) +
"\n";
72 }
catch (IOException ex) {
73 throw new RuntimeException(String.format(
"Error initializing file handler for %s", logFilePath), ex);
86 String logFilePath = Paths.get(logDirectory, LOG_WITH_STACK_TRACES).toString();
88 FileHandler fileHandler =
new FileHandler(logFilePath, LOG_SIZE, LOG_FILE_COUNT);
89 fileHandler.setEncoding(LOG_ENCODING);
90 fileHandler.setFormatter(
new Formatter() {
92 public String format(LogRecord record) {
93 if (record.getThrown() != null) {
94 String stackTrace =
"";
95 for (StackTraceElement traceElem : record.getThrown().getStackTrace()) {
96 stackTrace +=
"\t" + traceElem.toString() +
"\n";
98 return (
new Timestamp(record.getMillis())).toString() +
" "
99 + record.getSourceClassName() +
" "
100 + record.getSourceMethodName() +
"\n"
101 + record.getLevel() +
": "
102 + this.formatMessage(record) +
"\n"
103 + record.getThrown().toString() +
":\n"
107 return (
new Timestamp(record.getMillis())).toString() +
" "
108 + record.getSourceClassName() +
" "
109 + record.getSourceMethodName() +
"\n"
110 + record.getLevel() +
": "
111 + this.formatMessage(record) +
"\n";
116 }
catch (IOException ex) {
117 throw new RuntimeException(String.format(
"Error initializing file handler for %s", logFilePath), ex);
138 for (
Logger logger : namesToLoggers.values()) {
139 logger.addHandler(newUserFriendlyHandler);
140 logger.addHandler(newDeveloperFriendlyHandler);
141 logger.removeHandler(userFriendlyHandler);
142 logger.removeHandler(userFriendlyHandler);
151 userFriendlyHandler.close();
152 userFriendlyHandler = newUserFriendlyHandler;
153 developerFriendlyHandler.close();
154 developerFriendlyHandler = newDeveloperFriendlyHandler;
184 if (!namesToLoggers.containsKey(name)) {
186 logger.addHandler(userFriendlyHandler);
187 logger.addHandler(developerFriendlyHandler);
188 namesToLoggers.put(name, logger);
190 return namesToLoggers.get(name);
203 private Logger(String name, String resourceBundleName) {
204 super(name, resourceBundleName);
205 super.setUseParentHandlers(
false);
207 super.addHandler(consoleHandler);
static Version.Type getBuildType()
static final int LOG_SIZE
static final String LOG_WITHOUT_STACK_TRACES
synchronized static void setLogDirectory(String directoryPath)
Logger(String name, String resourceBundleName)
static final int LOG_FILE_COUNT
static FileHandler userFriendlyHandler
static final String LOG_ENCODING
static FileHandler developerFriendlyHandler
static final Handler consoleHandler
static FileHandler createFileHandlerWithTraces(String logDirectory)
static final Map< String, Logger > namesToLoggers
synchronized static Logger getLogger(String name)
static final String LOG_WITH_STACK_TRACES
synchronized static Logger getLogger(String name, String resourceBundleName)
static FileHandler createFileHandlerWithoutTraces(String logDirectory)