2

我正在 android 中开发自定义日志组件,我想获取方法名称、行号和类名,我尝试使用 StackTraceElement,但我只能从调用它的位置获取方法名称和行号,范围StackTraceElement 仅在调用它的方法内,但我需要打印类中所有方法的方法名称和行号,有人可以帮我这样做吗?

4

2 回答 2

4

For the class name

this.getClass().getName();

should be enough.

For line number I found

Thread.currentThread().getStackTrace()[1].getLineNumber();

and the method would be

Thread.currentThread().getStackTrace()[1].getMethodName()

Remember to access the right element from the array from the getStackTrace().

于 2013-10-01T09:42:59.693 回答
0

对于使用相同查询的任何新访问者,Java 9 及更高版本具有专门用于此目的的附加功能,称为StackWalker

List<StackFrame> stack =
StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE).walk((s) -> 
s.collect(Collectors.toList()));
System.out.println("All frames : \n" + stack.toString());

另请参阅教程

StackWalker 示例

于 2019-01-04T09:24:25.277 回答