之前写项目的时候一直用的自己封装的log,可以打印当前的类名,后来突然觉得很不方便(要想输出类名必须传入当前的参数), 而且调试的时候最想知道的其实是方法名,所以我每次打印log日志的时候都是把方法名放在tag里面,大概是(LogPrint.iprint(Object, Tag, msg)); 我一直在想,有没有什么方法可以获得当前正在执行的函数的名称呢, 可是仔细一想,不对呀,按照c和汇编的思路,底层机器指令在执行的时候,所谓的方法其实只是对应的一个地址而已,地址又何来的名字呢(恩,感觉很有道理), 想到这里也就放弃了。
不知过了多久,在网上突然看到了有人贡献了自己写了log日志封装类,让我想起了之前自己的问题,抱着好奇的心态下了下来看了看,
(github:https://github.com/ZhaoKaiQiang/KLog), 看着看着就发现了一个很有趣的东西StackTraceElement, 故名思议就是java追踪栈的元素的封装类啦,点开源码后,很开心的发现了declaringClass, methodName, fileName, lineNumber 这4个属性,接下来就是自己测试测试啦, 测试发现,当调用Thread.currentThread().getStackTrace()后遍历打印调用方法名(我调用的方法顺序为:onClick()->Klog.a()->printLog()->Thread.currentThread().getStackTrace()), 输出结果: getThreadStackTrace->getStackTrace->printLog-> a->onClick....。
总之,it这个行业不能老用旧的知识来限制自己(我开始就是这样), 有想法要先调研,然后再下结论!
重复的东西索然无味:
http://www.cnblogs.com/java-boy/archive/2013/01/05/2845347.html
http://www.2cto.com/kf/201408/328680.html