I log quite a bit of stuff, and have noticed that Eclipse Console makes Java stacktraces clickable. The exception is highlighted (goes to the "Create Breakpoint" dialog box) and the filename + numbers are highlighted too (allows going straight to that line).
I was wondering if I could format my normal log lines so the Eclipse Console would do the same to them. A possible approach could be making them look like stack trace lines, but in order to keep as much information as possible I would like to know the exact rule that Eclipse use to detect these lines, but Eclipse 3.6.2 is rather big so it is a herculean task.
The question is then, what are the rules in play here, and where are they defined?
Edit: The logback pattern layout snippet is %msg \(%file:%line\)%n
The actual regex can be found here: https://github.com/eclipse/eclipse.jdt.debug/blob/e7932c6319b3a96526134940ca57de0576e9607a/org.eclipse.jdt.debug.ui/plugin.xml#L3371
It boils down to something like
\(\w*\.java:\S*\)
i.e. only the parenthesized part is matched. The console then delegates the match to
org.eclipse.jdt.debug.ui.JavaConsoleTracker
which is an implementation forIPatternMatchListenerDelegate
. This creates the respectiveIHyperlink
(JavaStackTraceHyperlink). Only on clicking on the link the actual parsing is done, the whole line is read again to fetch the full package name etc. which is then searched for in the workspace.In case anybody like me needs to implement this behaviour outside of the Console (e.g. with
StyledText
):Match links with some regex, add respective
StyleRange
(cf.SWT.UNDERLINE_LINK
) with the data property set to the link data. On click, search the actual file in the workspace by package/class with:This snippet may help. It can be placed anywhere in your code and will print a "clickable" line on the eclipse console:
Update:
This question has an answer, that may include a solution for your problem:
Eclipse console: detect warning and error patterns and make them clickable
Here we go: we have to contribute an implementation of
org.eclipse.ui.console.IPatternMatchListenerDelegate
through extension pointorg.eclipse.ui.console.consolePatternMatchListeners
.The contributions that provide hyperlinks for exceptions and line numbers in stack traces are defined in the
org.eclipse.jdt.debug.ui
plugin, the implementing classes are in the same bundle.The rules are regular expressions and can be found in the
plugin.xml
of the contributing plugin.If you print
(filename:lineNumber)
, Eclipse will convert it to a link.Example:
I don't know if there are other rules or where they are defined.
Without
fullyQualifiedClassName
, Eclipse may choose the wrong file.methodName
is required for matching but not used -- it can be anything.