有没有办法让我写出一个指向控制台输出的链接,当点击它时会指向Intellij中的项目文件?
例如,发生运行时异常时会发生这种情况。我看到堆栈跟踪,我可以单击控制台中的一个链接,指示我遇到问题所在。在这里,我可以单击DatabaseConfiguration.java,我将被重定向到Intellij中的该文件。
我想要做的是输出一个readme.txt文件的链接,该文件在main启动时写入控制台。单击它会在Intellij中打开readme.txt。
我也在使用log4j并将输出定向到控制台,这可能会影响解决方案。这是我的转换模式:
log4j.appender.FILE.layout.conversionPattern=%d{HH:mm:ss,SSS} %-5p [%c] %m%n
答案 0 :(得分:5)
IDEA将在控制台中为与以下模式匹配的任何文本创建链接:
(${FileName}.${FileExtention}:${lineNum})
或作为正则表达式:
\([\w \.\-]+\.[\w]*:[\d]+\)
例如: (ErrorNotes.txt:10)
请注意,您需要包含括号。对于实际的类,您可以在log4j模式中使用以下内容: (%F:%L) 例如: 要引用另一个类或文件,您必须自己输出括号内的实际文件名,扩展名和行号,因为log4j只能访问当前类的信息。例如:
logger.error("A FluxCapacitorExcpetion #88 has occurred. See (Error Details.txt:542) for more details.")
答案 1 :(得分:0)
我为我找到了这个解决方案:
System.out.println("Printing stack trace:");
StackTraceElement[] elements = Thread.currentThread().getStackTrace();
for (int i = 1; i < elements.length; i++) {
StackTraceElement s = elements[i];
System.out.println("\tat " + s.getClassName() + "." + s.getMethodName()
+ "(" + s.getFileName() + ":" + s.getLineNumber() + ")");
}
主要结果在这里(仅链接到代码行-没有完整的堆栈跟踪):
StackTraceElement[] elements = Thread.currentThread().getStackTrace();
StackTraceElement s = elements[elements.length-1];
System.out.println("\tat " + s.getClassName() + "." + s.getMethodName()
+ "(" + s.getFileName() + ":" + s.getLineNumber() + ")");