Java从堆栈跟踪中获取文件的绝对路径

Mic*_*tte 5 java debugging stdout

我有一个用于调试的 Java 打印堆栈跟踪功能。

private static void printError(String message, Significance severityLevel, int stackTraceStart) {
    final String thread_name = Thread.currentThread().getName();
    final String location_of_print_statement = Thread.currentThread().getStackTrace()[stackTraceStart].toString();
    Package_Private.printLineToReadout("\n" + "Thread \"" + thread_name + "\": "
            + location_of_print_statement + "\n" + message, ReadoutCondition.BAD, severityLevel);
}
Run Code Online (Sandbox Code Playgroud)

问题是它只打印“modules.ShopModule.configure(ShopModule.scala:8)”

我希望它打印该文件的整个路径,而不是相对路径。

cha*_*aws 2

有点太晚了,但可能对其他人有用。您可以使用ClassLoader来搜索特定类文件对应的资源。

import static java.lang.System.out;
import java.util.Arrays;
import java.net.URL;

public class Abs {
  public static void main(String[] args){
    Arrays.asList(Thread.currentThread().getStackTrace()).stream().forEach(e -> {
      String cn = e.getClassName().replace('.', '/') + ".class";
      URL u = new Abs().getClass().getClassLoader().getResource(cn);
      out.println("" + u.toString().replace(".class", ".java") + ":" + e.getLineNumber());
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

类似的讨论在这里:possible to get the file-path of the class that Called a method in Java? 这里Class.getResource() 和 ClassLoader.getResource() 有什么区别?