Можно ли иметь интерактивные имена классов в консольном выпуске в IntelliJ?

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

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

Спасибо:)

Ответ 1

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

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

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

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

Ответ 2

Как и в 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>

Ответ 3

Вы можете определить свои собственные выходные фильтры или распечатать пути к файлам с номерами строк, разделенными двоеточием, либо полными путями, либо путями относительно источника проекта корни.

Пользовательский выходной фильтр может использовать следующие переменные: $FILE_PATH$, $LINE$.

Ответ 4

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

fullqualifiedclassname + "." + methodname + "(" + simpleclassname + ".java:" + linenumber + ")"

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

Ответ 5

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

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

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

Ответ 6

после некоторых испытаний я получил работоспособную настройку в весеннем загрузочном проекте с 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}\(% file:% line \)
это решение

Ответ 7

Установите потрясающую консоль IntelliJ Plugin с Marketplace: https://plugins.jetbrains.com/plugin/7677-awesome-console

Тогда все в вашем терминале, включая сбои сборки maven для классов Java, также будет активным.