Created
July 14, 2020 08:43
-
-
Save Oberon00/f4a160cb9bc6750cb086d3a1fe0e3b75 to your computer and use it in GitHub Desktop.
Debug multithreading issues with logging: Formatter that prints thread ID and milliseconds
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Logger.getLogger("").setLevel(Level.ALL); | |
final ConsoleHandler consoleHandler = new ConsoleHandler(); | |
consoleHandler.setFormatter( | |
new Formatter() { | |
private final MessageFormat messageFormat = | |
new MessageFormat("[{0,date,hh:mm:ss.SSS} {1} {2} {3}] {4}{5}\n", Locale.ROOT); | |
@Override | |
public String format(LogRecord record) { | |
final String backtrace; | |
if (record.getThrown() != null) { | |
final StringWriter sw = new StringWriter(); | |
final PrintWriter pw = new PrintWriter(sw); | |
record.getThrown().printStackTrace(pw); | |
pw.flush(); | |
backtrace = sw.toString(); | |
} else { | |
backtrace = null; | |
} | |
return messageFormat.format( | |
new Object[] { | |
new Date(record.getMillis()), | |
record.getLoggerName(), | |
record.getThreadID(), | |
record.getLevel().getName(), | |
new MessageFormat(record.getMessage(), Locale.ROOT) | |
.format(record.getParameters()), | |
backtrace == null ? "" : "\n" + backtrace | |
}); | |
} | |
}); | |
consoleHandler.setLevel(Level.ALL); | |
Logger.getLogger("").addHandler(consoleHandler); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment