Log工具类打印调用者信息

方法调用栈

方法调用栈,在Java 中可以通过两种方法获取到方法调用栈的信息

  • (new Throwable()).getStackTrace()
  • Thread.currentThread().getStackTrace()

这两种方式都能返回一个 StackTraceElement 数组,StackTraceElement 对象中包含了类名、方法名、文件名、代码行号这样的信息。

区别

(new Throwable()).getStackTrace()调用native StackTraceElement getStackTraceElement(int index);

Thread.currentThread().getStackTrace()调用
return (new Exception()).getStackTrace();

  • 也就是说第一张方式比第二种少一个层级
  • 获取上级调用者
    • (new Throwable()).getStackTrace()[1]
    • Thread.currentThread().getStackTrace()[2]

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.okada.go;

public class StackTraceDemo {

public static void main(String[] args) {
method();
}

private static void method() {
StackTraceElement[] stackTraceElements = (new Throwable()).getStackTrace();
for (int i = 0; i < stackTraceElements.length; i++) {
StackTraceElement stackTraceElement = stackTraceElements[i];
System.out.println("index=" + i + "----------------------------------");
System.out.println("className=" + stackTraceElement.getClassName());
System.out.println("fileName=" + stackTraceElement.getFileName());
System.out.println("methodName=" + stackTraceElement.getMethodName());
System.out.println("lineNumber=" + stackTraceElement.getLineNumber());
}
}
}
------ 本文结束------

本文标题:Log工具类打印调用者信息

文章作者:Perkins

发布时间:2019年11月29日

原始链接:https://perkins4j2.github.io/posts/38650/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。