您的位置:首页 > 编程语言 > Java开发

java 获取当前方法的被调用信息(被那个方法那个类那一行调用)

2017-12-27 11:49 519 查看

java 获取当前方法的被调用信息(被那个方法那个类那一行调用)

我本意是为Android的log写一个动态生成的tag,之前一直用固定的tag,但是在日志输出多了以后发现生成的日志太多其实分析起来也挺麻烦的,所以想写一个自动生成的tag,这样就不用每个类都自己写一个tag字段也能分辨出来日志是在哪个类中输出的。 主要是利用了查询当前线程堆栈中的信息辨别该代码的调用顺序,当然这种方式是没有过多放入考虑其他的问题;

代码部分

main 方法 一个简单例子

public class Test {

public static void main(String[] args) {
LogUtils.v();
}
}


查询代码的被调用信息 主要内容在 defaultTag()中

public class LogUtils {

public static void v() {
d();
}

public static void d() {
i();
}

public static void i() {
w();
}

public static void w() {
e();
}

public static void e() {
defaultTag();
}

private static String defaultTag() {
Sta
4000
ckTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
for (StackTraceElement e : stackTrace) {
System.out.println(e.getClassName() + "\t"
+ e.getMethodName() + "\t" + e.getLineNumber());
}
StackTraceElement log = stackTrace[1];
String tag = null;
for (int i = 1; i < stackTrace.length; i++) {
StackTraceElement e = stackTrace[i];
if (!e.getClassName().equals(log.getClassName())) {
tag = e.getClassName() + "." + e.getMethodName();
break;
}
}
if (tag == null) {
tag = log.getClassName() + "." + log.getMethodName();

}
System.out.println(tag);
return tag;
}
}


输出日志

java.lang.Thread    getStackTrace   1556
com.caesar.db.utils.LogUtils    defaultTag  32
com.caesar.db.utils.LogUtils    e   28
com.caesar.db.utils.LogUtils    w   24
com.caesar.db.utils.LogUtils    i   20
com.caesar.db.utils.LogUtils    d   16
com.caesar.db.utils.LogUtils    v   12
com.caesar.db.utils.Test    main    11
sun.reflect.NativeMethodAccessorImpl    invoke0 -2
sun.reflect.NativeMethodAccessorImpl    invoke  62
sun.reflect.DelegatingMethodAccessorImpl    invoke  43
java.lang.reflect.Method    invoke  498
com.intellij.rt.execution.application.AppMain   main    147
com.caesar.db.utils.Test.main


代码比较简单,主要用到 Thread.currentThread().getStackTrace() 这个方法 查询线程堆栈中的信息,然后检出LogUtils 的上一级调用类,也就是调用LogUtils 的类和方法 作为当前日志输出的tag。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐