【问题标题】:Create a hyperlink to a project file in console output在控制台输出中创建指向项目文件的超链接
【发布时间】:2015-06-19 00:41:27
【问题描述】:

有没有办法让我写出一个指向控制台输出的链接,单击该链接会指向 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

【问题讨论】:

    标签: java intellij-idea hyperlink console log4j


    【解决方案1】:

    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.")
    

    【讨论】:

      【解决方案2】:

      我为我找到了这个解决方案:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-01
        • 1970-01-01
        • 2017-07-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多