Можно ли иметь кликабельные имена классов в консоли вывода в IntelliJ? - PullRequest
15 голосов
/ 28 октября 2011

Когда вы запускаете сервер внутри IntelliJ, вы можете видеть вывод консоли в окне внизу экрана.

Есть ли способ отформатировать вывод, чтобы IntelliJ распознавал имена классов и делал их кликабельными? Затем, когда я вижу имя класса в выходных данных сервера, я могу щелкнуть по нему и перейти прямо туда.

Спасибо:)

Ответы [ 5 ]

25 голосов
/ 26 апреля 2015

Начиная с IntelliJ 14 и альтернативы копанию в настройках IntelliJ, некоторые методы проб и ошибок показали, что все с шаблоном

(anyfile.ext:line)

, которому предшествует хотя бы один . в консоли, превращается в ссылку на файл, если существует какой-либо файл с таким именем, например, .(Whatever.java:55), в рабочей области, исключая библиотеки.

Я использую logback. Поэтому как минимум в моем logback.xml для получения ссылок на мои классы я включил в свой шаблон сообщения

.\(%class{0}.java:%line\)
  • .\( \) -> Точка должна предшествовать имени файла: шаблон линии и имени файла: шаблон линии, заключенный в скобки. В этом случае для входа в систему требуется экранирование буквальных скобок.
  • %class{0} -> Просто имя класса без пакета
  • .java -> чтобы оно совпадало с полным именем файла
  • :%line -> Строка регистрации кода

На самом деле у меня есть другие вещи, которые всегда включают по крайней мере одну . перед частью (filename:line), поэтому IntelliJ также подхватывает ее.

<pattern>%highlight(%-5level) %d{yyyy-MM-dd'T'HH:mm:ss.SSS} %yellow([%thread]) %blue(%logger{36}\(%class{0}.java:%line\)) %msg%n</pattern>
8 голосов
/ 16 февраля 2013

Есть. Взято из онлайн справки http://www.jetbrains.com/idea/webhelp/setting-log-options.html

Если вы используете сторонние инструменты ведения журнала, вы можете сделать вывод сообщения, который имитирует стандартную связь с исходным кодом как для линии трассировки стека (в . (:)). Для этого вы должны добавить конкретный шаблон конверсии в ваш log.xml конфигурационный файл. Например, в шаблоне преобразования log4j это будет

<param name="ConversionPattern" value="%-5p - [%-80m] - at %c.%M(%F:%L)%n"/>

Однако вывод продукции довольно уродливый с полностью определенными именами, именами методов и т. Д.

0 голосов
/ 09 января 2019

после некоторых испытаний я получил работоспособную настройку в весеннем загрузочном проекте с Intelligent IDEA ULIMATE 2017.3.2 и logback 1.2.3
настройки в logback-spring.xml примерно так:

<configuration>
    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(at %class.%method){cyan} \\(%file:%line\\) %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
</configuration>

% clr (в методе% class.%) {Cyan} \ (файл%:% line \)
это решение

0 голосов
/ 24 мая 2018

Чтобы завершить ответ @ JasonDunkelberger, после ошибок и проб, я получил лучшее регулярное исключение, которое Intellij, вероятно, анализирует, чтобы найти, где разместить гиперссылки:

(at )?+.*\..*\(.*?\)

В ответе @ JasonDunkelberger, в некоторых случаях, если после ссылки были скобки или две буквы "at", ссылка не активировалась.

0 голосов
/ 18 января 2018

Чтобы все действительно работало, вам нужно соблюдать полное обозначение трассировки стека.Как его недостаточно просто поставить точку "."перед скобками.Если у вас есть два класса с одинаковыми именами, но разными пакетами, IntelliJ выберет первый найденный класс.Чтобы это работало ПРАВИЛЬНО, даже в этом случае вам нужно написать

полностью определенное имя класса + "."+ methodname + "(" + simpleclassname + ".java:" + linenumber + ")"

Если вы не знаете номер строки, используя ": 1", у меня сработало

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...