Skip to content

Instantly share code, notes, and snippets.

@Oberon00
Created July 14, 2020 08:43
Show Gist options
  • Save Oberon00/f4a160cb9bc6750cb086d3a1fe0e3b75 to your computer and use it in GitHub Desktop.
Save Oberon00/f4a160cb9bc6750cb086d3a1fe0e3b75 to your computer and use it in GitHub Desktop.
Debug multithreading issues with logging: Formatter that prints thread ID and milliseconds
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