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。
相关文章推荐
- jni中调用java方法获取当前apk的签名文件md5值
- java 获取调用类的 类名 方法名等信息
- 运行时获取方法调用堆栈信息(java)
- java获取当前方法被调用的过程栈
- Android获取apk签名信息(举例说明java反射调用方法步骤)
- jni中调用java方法获取当前apk的签名文件md5值
- 运行时获取方法调用堆栈信息(java)
- 在被调用方法中如何获取调用方的相关信息
- Java获取系统信息(cpu,内存,硬盘,进程等)的相关方法
- Java在不同环境下获取当前路径的方法--this.getClass().getResource("")
- 通过silktest调用c#写的工具获取dll文件信息的方法
- java获取当前路径的几种方法
- Java在不同环境下获取当前路径的方法--this.getClass().getResource("")
- Java获取当前系统详细信息
- Java获取系统信息(cpu,内存,硬盘,进程等)的相关方法
- Java网络编程从入门到精通(28):获取ServerSocket信息的方法及FTP原理 推荐
- Java在不同环境下获取当前路径的方法--this.getClass().getResource("")
- Asp.Net获取电脑名,IP地址及当前用户名,操作系统,浏览器,.NET版本等信息的方法
- 利用sender的Parent获取GridView中的当前行 不用AJAX实现前台JS调用后台C#方法(小技巧) AjaxControlToolkit的CalendarExtender的本地化
- 各类Java heap space 解决方法,并通过java代码获取JVM的相关信息,所在操作系统的信息(包含eclipse&amp;myeclipse的调试的内存设置)