Java是否有方法可以获取当前文件名和当前行号?

6

在C++中,源代码文件和当前行号由FILEINLINE决定,在编译时确定。在Java中有没有类似的方法可以做到这一点?文件和行号是在编译时而不是运行时确定的吗?这对于日志记录非常方便。我有点怀疑使用运行时方法来检测这些信息会降低性能。


1
可能是重复的问题:如何从java.lang.Class对象中获取源文件名/行号 - William Price
1
请查看使用Apache logging服务,它允许您在日志格式中指定文件和行号(以及其他信息),这些信息可以打印到屏幕上或写入文件。 - Ryan J
William Price,谢谢您的信息,非常有用。 - python
1个回答

6
你可以使用Thread.getStackTrace()方法以及类似的内容。
System.out.println(Thread.currentThread().getStackTrace()[1]);

输出包括当前方法和行号(如果启用了调试)。例如,

com.stackoverflow.Main.main(Main.java:23)

1
新的 Throwable().getStackTrace() 更加高效。 - auntyellow
那不是一项昂贵的操作吗? - dkatzel
@dkatzel 这是一种获取当前文件名和行号的方式;我不是在说它的效率。 - Elliott Frisch
System.out.println(Thread.currentThread().getStackTrace()[1]); 我已经测试过了,似乎这会扫描调用栈,性能不如我所期望的好。 - python

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接