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
требуется для сопоставления, но не используется - это может быть что угодно.