[置顶] android 自定义可跳转的log
2016-08-05 21:16
337 查看
用android studio打log,一般会是这种样式log.v(tag,”log content”);给程序调试带来很多方便,不过当程序越来越大,或者忘记在哪里打的log,再在代码中寻找打log的语句就有些麻烦,当然你可以也可以用全局搜索,不过log多了也是很吃力的; 我们知道程序报错时,会在抛出异常时打印这些,其中出错点使可以直接跳转过去的;如图:
那么我们自己的log也可以自定义成可跳转的,事实上,只要你的log打印的字符串符合某种规则,android studio会自动添加超链接,要实现很简单,就根据上图中字符串的组织形式自己拼接就可以了。
在eclipse中 一般“at (packagename.classname.java:行号) ”这种形式;
在android studio中一般是:“at packagename.classname.medthod(classname.java:行号)”,
我们可以将获取包名,类名,行号的语句添加再自己的log.class 中,由于log不可继承,我们将封装好的字符串作为log.v(,)的msg传入就好。 得到行号等信息需要用到stackTrace(),我们在处理异常时就是在printstackTrace();不难想象,get到的就是一个数组,其中从0到数组尾分别存放了对应栈的一个栈帧,栈顶元素保存在数组第0号; 那么我们log.v()代码是在第0号元素吗? 并不是,尝试分别打印其对应的classname或linenumber,有些信息是获取不到的,即使获取到也不是我们想要的,查阅资料,在我们调用 getstacktrack方法之后,程序本身自己又进行了四次调用,等我们得到elements后,存放打印log的element位置已经到了第4号,所以要从数组下标3进行获取,其实也可以直接打印获取到的stackTrace,找到我们想要的那一条,确定它在哪个位置; 于是就可以自定义log了 我写的代码如下
import android.util.Log; public class l { public static String s = ""; private static int i=3 private enum LogState { INFO, ERROR, ALL; } public static final LogState CURRENT_STATE = LogState.ALL; public static void i(final String msg) { StackTraceElement[] elements = Thread.currentThread().getStackTrace(); if (elements.length < 5) { Log.v("test", "myLog error elements.length < 5"); } else { s = "at " + elements[i].getClassName() + "." + elements[i].getMethodName() + "(" + elements[i].getClassName().substring(elements[i].getClassName().lastIndexOf(".") + 1, elements[i].getClassName().length()) + ".java:" + elements[i].getLineNumber() + ")"; } switch (CURRENT_STATE) { case ALL: case INFO: Log.v("test", s + " " + msg); } } }
在这里将log的tag写死成“test”,也可以自己设定,经android studio测试,可以打印出有跳转到log语句;
效果图:
本文对log4J部分并未深究,难免有不妥甚至谬误,请不吝指正!
参考文献:
http://www.tuicool.com/articles/QbYjYj
http://javaeedevelop.iteye.com/blog/1729402
http://www.tuicool.com/articles/QbYjYj
http://blog.csdn.net/laihuan99/article/details/8929749?utm_source=tuicool
相关文章推荐
- Android-Activity生命周期 基本方法的作用
- [转]android解决apk编译方法数超过64k的问题
- Android LocalBroadCastManager简介
- 使用Remix OS作为X86 Android系统开发OS
- Android MaterialDesign(一)
- Android RecyclerView的焦点错乱处理及监听右键及左键
- 使用android studio集成极光推送
- Android版本和API Level对应关系
- Android中音频视频录制用到的类 MediaRecoder的用法
- Andrroid解析xml文件之Pull解析
- Android Studio中的Gradle介绍
- 初学者都应该看的 --- Activity的生命周期
- Android 记录和恢复ListView滚动的位置的三种方法
- Android热修复实践应用--AndFix
- Android学习之客户端上传图片到服务器
- Android 四大组件 @3Service
- Android 上传图片到服务器
- Android数据存储五种方式总结
- android选择图片或拍照图片上传到服务器(包括上传参数)
- android小记之FTP文件上传