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