在控制台输出中创建指向项目文件的超链接

时间:2015-06-19 00:41:28

标签: java intellij-idea hyperlink console log4j

有没有办法让我写出一个指向控制台输出的链接,当点击它时会指向Intellij中的项目文件?

例如,发生运行时异常时会发生这种情况。我看到堆栈跟踪,我可以单击控制台中的一个链接,指示我遇到问题所在。在这里,我可以单击DatabaseConfiguration.java,我将被重定向到Intellij中的该文件。 enter image description here

我想要做的是输出一个readme.txt文件的链接,该文件在main启动时写入控制台。单击它会在Intellij中打开readme.txt。

我也在使用log4j并将输出定向到控制台,这可能会影响解决方案。这是我的转换模式:

log4j.appender.FILE.layout.conversionPattern=%d{HH:mm:ss,SSS} %-5p [%c] %m%n

2 个答案:

答案 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() + ")");