Eclipse Console - каковы правила, позволяющие отслеживать трассировки стека?

Я записываю довольно много вещей, и заметил, что Eclipse Console делает Java stacktraces кликабельными. Исключение подсвечивается (идет в диалоговом окне "Создать точку останова" ), а также указывается имя файла + номера (позволяет перейти прямо к этой строке).

Мне было интересно, могу ли я форматировать мои обычные строки журнала, чтобы Eclipse Console сделала то же самое с ними. Возможный подход может сделать их похожими на строки трассировки стека, но для того, чтобы сохранить как можно больше информации, я хотел бы знать точное правило, которое Eclipse использует для обнаружения этих строк, но Eclipse 3.6.2 довольно большой, поэтому задача геркулеса.

Вопрос в том, какие правила здесь играют и где они определены?


Изменить: фрагмент макета шаблона обратного хода %msg \(%file:%line\)%n

Ответ 1

Этот фрагмент может помочь. Он может быть размещен в любом месте вашего кода и напечатает строку "clickable" на консоли eclipse:

StackTraceElement s = Thread.currentThread().getStackTrace()[1];
System.out.printf("%s.%s(%s:%s)%n", s.getClassName(), s.getMethodName(),
            s.getFileName(), s.getLineNumber());

Update:

У этого вопроса есть ответ, который может включать решение вашей проблемы:

Консоль Eclipse: обнаружение шаблонов предупреждений и ошибок и их кликабельность


В этом случае мы должны внести вклад в реализацию org.eclipse.ui.console.IPatternMatchListenerDelegate через точку расширения org.eclipse.ui.console.consolePatternMatchListeners.

Вкладки, которые предоставляют гиперссылки для исключений и номера строк в трассировке стека, определены в плагине org.eclipse.jdt.debug.ui, классы реализации находятся в одном комплекте.

Правила являются регулярными выражениями и могут быть найдены в plugin.xml добавляющего плагина.

Ответ 2

Если вы печатаете (filename:lineNumber), Eclipse преобразует его в ссылку.

Пример:

System.out.println("message (Hello.java:2)");

Я не знаю, существуют ли другие правила или где они определены.

Ответ 3

fullyQualifiedClassName.methodName(fileName:lineNumber)

Без fullyQualifiedClassName, Eclipse может выбрать неправильный файл. methodName требуется для сопоставления, но не используется - это может быть что угодно.