首页 > 代码库 > 一个功能强大的日志工具类
一个功能强大的日志工具类
日志可谓是开发中必不可少的工具了, 但是一般的日志信息难以满足我们的需要,特别是对于大一点的复杂的项目,日志太多,经常导致我们定位不到打印日志的位置.因此我们希望打印的日志能告诉我们日志是在哪里打印的,哪个类,哪个方法,哪一行? 更进一步,最好我点击日志就能跳转到源码处,那就更好啦.
同时,对于一些模块很多的大型app,bug偶尔出现的情况, 有时要修复bug通常要联系整个模块的上下文信息才能找到, 这时我们可以将同一个模块的TAG设置为一样的,最好能将相关日志写入本地,以便测试提出bug的时候我们可以直接去手机里查看日志即可.最终效果图如下:
可以看到有具体的线程信息,类信息,方法信息,以及源码位置,并且点击链接将跳转到源码处,同时,json已经格式化了,看着很方便.
下面说说怎么实现.
那怎么获取类名方法名,行数呢?这时就需要用到StackTraceElement类了,我们知道,在方法执行时,线程会将该方法压入栈,因此可以通过线程获取相应的栈帧元素,来取得方法的调用信息.
如下图所示:
可以看到,线程的调用轨迹,我们可以利用这个获取到方法被调用对应的StackTraceElement.
StackTraceElement LogElement = Thread.currentThread().getStackTrace()[4];//这里去index为4是与具体方法调用深度有关
String fullClassName = LogElement.getClassName();
String threadName = Thread.currentThread().getName();
String className = fullClassName.substring(fullClassName.lastIndexOf(".") + 1);
String methodName = LogElement.getMethodName();
String fileName = LogElement.getFileName();
int lineNumber = LogElement.getLineNumber();
再然后,组装这些日志信息:
StringBuffer buffer = new StringBuffer();
buffer.append("at ");//链接到源码
buffer.append("[");
buffer.append(threadName);
buffer.append(":");
buffer.append(className);
buffer.append(".");
buffer.append(methodName);
buffer.append("(");
buffer.append(fileName);
buffer.append(":");
buffer.append(lineNumber);
buffer.append(")");
buffer.append("] ");
buffer.append(log);
同时,我们可以通过buffer.append("at ")来链接到源码位置.
最后,通过分析json字符串的规律,我们通过代码对其进行格式化输出,方便查看; 以可以将日志写入本地文件方便查看.
最后放一下GitHub,欢迎star.
Github:https://github.com/wytiger/MyLog
一个功能强大的日志工具类
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。