Class LogNode
- java.lang.Object
-
- nonapi.io.github.classgraph.utils.LogNode
-
public final class LogNode extends java.lang.ObjectA tree-structured threadsafe log that allows you to add log entries in arbitrary order, and have the output retain a sane order. The order may also be made deterministic by specifying a sort key for log entries.
-
-
Field Summary
Fields Modifier and Type Field Description private java.util.Map<java.lang.String,LogNode>childrenThe child nodes of this log node.private static java.text.SimpleDateFormatdateTimeFormatterThe date/time formatter (not threadsafe).private longelapsedTimeNanosThe time between when this log entry was created and addElapsedTime() was called.private static java.util.logging.LoggerlogThe logger.private static booleanlogInRealtimeIf true, log entries are output in realtime, as well as added to the LogNode tree.private java.lang.StringmsgThe log message.private static java.text.DecimalFormatnanoFormatterThe elapsed time formatter.private LogNodeparentThe parent LogNode.private java.lang.StringsortKeyPrefixThe sort key prefix for deterministic ordering of log entries.private static java.util.concurrent.atomic.AtomicIntegersortKeyUniqueSuffixThe sort key suffix for this log entry, used to make sort keys unique.private java.lang.StringstackTraceThe stacktrace, if this log entry was due to an exception.private longtimeStampMillisThe timestamp at which the log node was created, in epoch millis.private longtimeStampNanoThe timestamp at which the log node was created (relative to some arbitrary system timepoint).
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private LogNodeaddChild(java.lang.String sortKey, java.lang.String msg, long elapsedTimeNanos)Add a child log node for a message.private LogNodeaddChild(java.lang.String sortKey, java.lang.String msg, long elapsedTimeNanos, java.lang.Throwable exception)Add a child log node.private LogNodeaddChild(java.lang.Throwable exception)Add a child log node for an exception.voidaddElapsedTime()Call this once the work corresponding with a given log entry has completed if you want to show the time taken after the log entry.private voidappendLine(java.lang.String timeStampStr, int indentLevel, java.lang.String line, java.lang.StringBuilder buf)Append a line to the log output, indenting this log entry according to tree structure.voidflush()Flush out the log to stderr, and clear the log contents.LogNodelog(java.lang.String msg)Add a log entry.LogNodelog(java.lang.String msg, long elapsedTimeNanos)Add a log entry.LogNodelog(java.lang.String msg, long elapsedTimeNanos, java.lang.Throwable e)Add a log entry.LogNodelog(java.lang.String sortKey, java.lang.String msg)Add a log entry with sort key for deterministic ordering.LogNodelog(java.lang.String sortKey, java.lang.String msg, long elapsedTimeNanos)Add a log entry with sort key for deterministic ordering.LogNodelog(java.lang.String sortKey, java.lang.String msg, long elapsedTimeNanos, java.lang.Throwable e)Add a log entry with sort key for deterministic ordering.LogNodelog(java.lang.String sortKey, java.lang.String msg, java.lang.Throwable e)Add a log entry with sort key for deterministic ordering.LogNodelog(java.lang.String msg, java.lang.Throwable e)Add a log entry.LogNodelog(java.lang.Throwable e)Add a log entry.LogNodelog(java.util.Collection<java.lang.String> msgs)Add a series of log entries.static voidlogInRealtime(boolean logInRealtime)If logInRealtime is true, log entries are output in realtime, as well as added to the LogNode tree.private voidlogJavaInfo()Log the Java version and the JRE paths that were found.java.lang.StringtoString()Build the log output.private voidtoString(int indentLevel, java.lang.StringBuilder buf)Recursively build the log output.
-
-
-
Field Detail
-
log
private static final java.util.logging.Logger log
The logger.
-
timeStampNano
private final long timeStampNano
The timestamp at which the log node was created (relative to some arbitrary system timepoint).
-
timeStampMillis
private final long timeStampMillis
The timestamp at which the log node was created, in epoch millis.
-
msg
private final java.lang.String msg
The log message.
-
stackTrace
private java.lang.String stackTrace
The stacktrace, if this log entry was due to an exception.
-
elapsedTimeNanos
private long elapsedTimeNanos
The time between when this log entry was created and addElapsedTime() was called.
-
parent
private LogNode parent
The parent LogNode.
-
children
private final java.util.Map<java.lang.String,LogNode> children
The child nodes of this log node.
-
sortKeyPrefix
private final java.lang.String sortKeyPrefix
The sort key prefix for deterministic ordering of log entries.
-
sortKeyUniqueSuffix
private static java.util.concurrent.atomic.AtomicInteger sortKeyUniqueSuffix
The sort key suffix for this log entry, used to make sort keys unique.
-
dateTimeFormatter
private static final java.text.SimpleDateFormat dateTimeFormatter
The date/time formatter (not threadsafe).
-
nanoFormatter
private static final java.text.DecimalFormat nanoFormatter
The elapsed time formatter.
-
logInRealtime
private static boolean logInRealtime
If true, log entries are output in realtime, as well as added to the LogNode tree.
-
-
Constructor Detail
-
LogNode
private LogNode(java.lang.String sortKey, java.lang.String msg, long elapsedTimeNanos, java.lang.Throwable exception)Create a non-toplevel log node. The order may also be made deterministic by specifying a sort key for log entries.- Parameters:
sortKey- the sort keymsg- the log messageelapsedTimeNanos- the elapsed time in nanosexception- the exception that was thrown
-
LogNode
public LogNode()
Create a toplevel log node.
-
-
Method Detail
-
logInRealtime
public static void logInRealtime(boolean logInRealtime)
If logInRealtime is true, log entries are output in realtime, as well as added to the LogNode tree. This can help debug situations where log info is never shown, e.g. deadlocks, or where you need to show the log info right up to the point where you hit a breakpoint.- Parameters:
logInRealtime- whether to log in realtime
-
logJavaInfo
private void logJavaInfo()
Log the Java version and the JRE paths that were found.
-
appendLine
private void appendLine(java.lang.String timeStampStr, int indentLevel, java.lang.String line, java.lang.StringBuilder buf)Append a line to the log output, indenting this log entry according to tree structure.- Parameters:
timeStampStr- the timestamp stringindentLevel- the indent levelline- the line to logbuf- the buf
-
toString
private void toString(int indentLevel, java.lang.StringBuilder buf)Recursively build the log output.- Parameters:
indentLevel- the indent levelbuf- the buf
-
toString
public java.lang.String toString()
Build the log output. Call this on the toplevel log node.- Overrides:
toStringin classjava.lang.Object- Returns:
- the string
-
addElapsedTime
public void addElapsedTime()
Call this once the work corresponding with a given log entry has completed if you want to show the time taken after the log entry.
-
addChild
private LogNode addChild(java.lang.String sortKey, java.lang.String msg, long elapsedTimeNanos, java.lang.Throwable exception)
Add a child log node.- Parameters:
sortKey- the sort keymsg- the log messageelapsedTimeNanos- the elapsed time in nanosexception- the exception that was thrown- Returns:
- the log node
-
addChild
private LogNode addChild(java.lang.String sortKey, java.lang.String msg, long elapsedTimeNanos)
Add a child log node for a message.- Parameters:
sortKey- the sort keymsg- the log messageelapsedTimeNanos- the elapsed time in nanos- Returns:
- the log node
-
addChild
private LogNode addChild(java.lang.Throwable exception)
Add a child log node for an exception.- Parameters:
exception- the exception that was thrown- Returns:
- the log node
-
log
public LogNode log(java.lang.String sortKey, java.lang.String msg, long elapsedTimeNanos, java.lang.Throwable e)
Add a log entry with sort key for deterministic ordering.- Parameters:
sortKey- The sort key for the log entry.msg- The message.elapsedTimeNanos- The elapsed time.e- TheThrowablethat was thrown.- Returns:
- a child log node, which can be used to add sub-entries.
-
log
public LogNode log(java.lang.String sortKey, java.lang.String msg, long elapsedTimeNanos)
Add a log entry with sort key for deterministic ordering.- Parameters:
sortKey- The sort key for the log entry.msg- The message.elapsedTimeNanos- The elapsed time.- Returns:
- a child log node, which can be used to add sub-entries.
-
log
public LogNode log(java.lang.String sortKey, java.lang.String msg, java.lang.Throwable e)
Add a log entry with sort key for deterministic ordering.- Parameters:
sortKey- The sort key for the log entry.msg- The message.e- TheThrowablethat was thrown.- Returns:
- a child log node, which can be used to add sub-entries.
-
log
public LogNode log(java.lang.String sortKey, java.lang.String msg)
Add a log entry with sort key for deterministic ordering.- Parameters:
sortKey- The sort key for the log entry.msg- The message.- Returns:
- a child log node, which can be used to add sub-entries.
-
log
public LogNode log(java.lang.String msg, long elapsedTimeNanos, java.lang.Throwable e)
Add a log entry.- Parameters:
msg- The message.elapsedTimeNanos- The elapsed time.e- TheThrowablethat was thrown.- Returns:
- a child log node, which can be used to add sub-entries.
-
log
public LogNode log(java.lang.String msg, long elapsedTimeNanos)
Add a log entry.- Parameters:
msg- The message.elapsedTimeNanos- The elapsed time.- Returns:
- a child log node, which can be used to add sub-entries.
-
log
public LogNode log(java.lang.String msg, java.lang.Throwable e)
Add a log entry.- Parameters:
msg- The message.e- TheThrowablethat was thrown.- Returns:
- a child log node, which can be used to add sub-entries.
-
log
public LogNode log(java.lang.String msg)
Add a log entry.- Parameters:
msg- The message.- Returns:
- a child log node, which can be used to add sub-entries.
-
log
public LogNode log(java.util.Collection<java.lang.String> msgs)
Add a series of log entries. Returns the last LogNode created.- Parameters:
msgs- The messages.- Returns:
- the last log node created, which can be used to add sub-entries.
-
log
public LogNode log(java.lang.Throwable e)
Add a log entry.- Parameters:
e- TheThrowablethat was thrown.- Returns:
- a child log node, which can be used to add sub-entries.
-
flush
public void flush()
Flush out the log to stderr, and clear the log contents. Only call this on the toplevel log node, when threads do not have access to references of internal log nodes so that they cannot add more log entries inside the tree, otherwise log entries may be lost.
-
-