Intellij Idea 在IntelliJ的控制台输出中可以有可点击的类名吗?

8xiog9wr  于 2023-02-11  发布在  其他
关注(0)|答案(9)|浏览(220)

在IntelliJ中运行服务器时,可以在屏幕底部的窗口中看到控制台输出。
有没有什么方法可以格式化输出,使IntelliJ能够识别类名并使其可点击?这样,当我在服务器输出中看到类名时,我就可以点击它并直接进入那里。
谢谢:)

jc3wubiy

jc3wubiy1#

从IntelliJ 14开始,除了挖掘IntelliJ设置之外,一些试验和错误显示任何具有该模式的东西

(anyfile.ext:line)

控制台中前面至少有一个.的文件,如果在工作区(不包括库的文件)中有该名称的已知文件(例如.(Whatever.java:55)),则会转换为文件链接。
我正在使用logback,所以至少在我的logback.xml中获取到我包含在消息模式中的类的链接

.\(%class{0}.java:%line\)
  • .\( \)-〉必须在文件名:行模式和用括号括起来的文件名:行模式前面加一个点。在这种情况下,Logback要求对文字括号进行转义。
  • %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>
mctunoxg

mctunoxg2#

有。取自联机帮助http://www.jetbrains.com/idea/webhelp/setting-log-options.html
如果使用的是第三方日志记录工具,则可能需要生成消息输出,模拟stacktrace行(.(:))的源代码标准链接。为此,应将特定的转换模式添加到log.xml配置文件中。例如,在log4j转换模式中,这将是

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

然而,products的输出非常难看,有完全限定名、方法名等。

gc0ot86w

gc0ot86w3#

要使事情真正工作,你需要遵守完整的stacktrace表示法。就像它是不够的,只是把一个点“.”在前面的括号。如果你有两个类具有相同的名称,但不同的包,IntelliJ将选择它找到的第一个。为了使它正确地工作,即使在这种情况下,你需要写
完全限定类名+“.”+方法名+“(“+简单类名+“.java:“+行号+“)”
如果您不知道行号,请使用“:1”

cwtwac6a

cwtwac6a4#

为了完成@JasonDunkelberger的回答,在错误和尝试之后,我得到了一个更好的常规异常,Intellij可能正在解析该异常以找到放置超链接的位置:

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

在@JasonDunkelberger的回答中,在某些情况下,如果链接后面有一些括号,或者两个字母“at”,链接就不会激活。

w1jd8yoj

w1jd8yoj5#

经过一些试验,我得到了一个可行的设置在Spring Boot 项目,与IntelliJ 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.%方法){青色} \(%文件:%行\)

就是解决方案

z6psavjg

z6psavjg6#

从Marketplace安装IntelliJ插件Awesome控制台:https://plugins.jetbrains.com/plugin/7677-awesome-console
然后,终端中的所有内容(包括Java类的maven构建失败)也都可以单击。

0qx6xfy6

0qx6xfy67#

根据官方文件,https://www.jetbrains.com/help/idea/setting-log-options.html
我将其设置如下(我正在使用logback):
<Pattern>%d %-5level - at %class.%M\(%file:%line\) - %msg %replace(%ex){'[\r\n]+', ''}%nopex%n</Pattern>
有点古怪,但很管用。

日志输出示例:

2020-03-02 19:42:36,636 INFO - at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:489) - FrameworkServlet 'bea': initialization started 2020-03-02 19:42:36,779 INFO - at org.springframework.context.support.AbstractApplicationContext.prepareRefresh(AbstractApplicationContext.java:581) - Refreshing WebApplicationContext for namespace 'bea-servlet': startup date [Mon Mar 02 19:42:36 IST 2020]; root of context hierarchy

h43kikqp

h43kikqp8#

在使用Log4j 2/Logback转换模式时需要注意的一点是(%class%M等)的一个缺点是,它在运行时从Stacktrace进行评估,这会导致非常高的性能损失。为了解决这个问题,我开发了一个maven插件,它可以注入调用方法等信息,类甚至源代码行号添加到每个SLF 4J日志语句调用(log.info()、warn()...)中,而几乎没有性能损失:
PhilKes/slf4j-caller-info-maven-plugin

fjaof16o

fjaof16o9#

模式类似:
fullfileLoction :10也可以。
例如:
对于Mac OS
/用户/我的名字/我的java/我的项目/源代码/主/com/.../www.example.com:10Main.java :10

相关问题