zoukankan      html  css  js  c++  java
  • 一个功能强大的日志工具类

        日志可谓是开发中必不可少的工具了, 但是一般的日志信息难以满足我们的需要,特别是对于大一点的复杂的项目,日志太多,经常导致我们定位不到打印日志的位置.因此我们希望打印的日志能告诉我们日志是在哪里打印的,哪个类,哪个方法,哪一行? 更进一步,最好我点击日志就能跳转到源码处,那就更好啦.

      同时,对于一些模块很多的大型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

  • 相关阅读:
    node.js学习二---------------------同步API和异步API的区别
    node.js学习一---------------------模块的导入
    ES6函数的特性(箭头语法)
    10分钟了解Android的Handler机制
    10分钟了解Android的事件分发
    SwipeRefreshLayout,用最少的代码定制最美的上下拉刷新样式
    手把手教你React Native 实战之开山篇《一》
    Android 组件化方案探索与思考
    2018谷歌I/O开发者大会8大看点汇总 新品有哪些
    Glide高级详解—缓存与解码复用
  • 原文地址:https://www.cnblogs.com/wytiger/p/6193061.html
Copyright © 2011-2022 走看看