android中java代码打印的log只有从tag来区分代码是那个模块的,android中带的Log函数也无法打印log信息所在的函数名和所在的行数等信息,这样看log不是很方便,于是想向c中获取函数名和行数的宏放到java的log中,这样打印的log 一眼就能函数log所在的文件 函数名 和行数,马上就能定位到log的具体位置,而且在android中用adb 打印的log在终端上显示的都是白色,将不同的log信息添加不同的颜色,这样看log会更方便,于是我对android中的Log等函数进行了一下封装,封装后的log可以实现上述的功能。

一下是封装的代码:

public final class log {    //当前文件名 行号 函数名    public static String getFileLineMethod() {    StackTraceElement traceElement = ((new Exception()).getStackTrace())[1];    StringBuffer toStringBuffer = new StringBuffer("[").append(    traceElement.getFileName()).append(" | ").append(    traceElement.getLineNumber()).append(" | ").append(    traceElement.getMethodName()).append("()").append("]");    return toStringBuffer.toString();    }    // 当前文件名    public static String _FILE_() {    StackTraceElement traceElement = ((new Exception()).getStackTrace())[1];    return traceElement.getFileName();    }     // 当前方法名    public static String _FUNC_() {    StackTraceElement traceElement = ((new Exception()).getStackTrace())[1];    return traceElement.getMethodName();    }     // 当前行号    public static int _LINE_() {    StackTraceElement traceElement = ((new Exception()).getStackTrace())[1];    return traceElement.getLineNumber();    }     // 当前时间    public static String _TIME_() {    Date now = new Date(0);    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");    return sdf.format(now);     }         public static void v(String msg) {        StackTraceElement traceElement = ((new Exception()).getStackTrace())[1];        StringBuffer toStringBuffer = new StringBuffer("[").append(        traceElement.getFileName()).append(" | ").append(        traceElement.getLineNumber()).append(" | ").append(        traceElement.getMethodName()).append("()").append("]");        String TAG = toStringBuffer.toString();        Log.v(TAG, msg);    }    public static  void d(String msg) {        StackTraceElement traceElement = ((new Exception()).getStackTrace())[1];        StringBuffer toStringBuffer = new StringBuffer("[").append(        traceElement.getFileName()).append(" | ").append(        traceElement.getLineNumber()).append(" | ").append(        traceElement.getMethodName()).append("()").append("]");        String TAG = toStringBuffer.toString();                 Log.d("\033[0;34m" + TAG , msg + "\033[0m");    }         public static void i(String msg) {        StackTraceElement traceElement = ((new Exception()).getStackTrace())[1];        StringBuffer toStringBuffer = new StringBuffer("[").append(        traceElement.getFileName()).append(" | ").append(        traceElement.getLineNumber()).append(" | ").append(        traceElement.getMethodName()).append("()").append("]");        String TAG = toStringBuffer.toString();        Log.i("\033[0;32m" + TAG,msg + "\033[0m");    }         public static void w(String msg) {        StackTraceElement traceElement = ((new Exception()).getStackTrace())[1];        StringBuffer toStringBuffer = new StringBuffer("[").append(        traceElement.getFileName()).append(" | ").append(        traceElement.getLineNumber()).append(" | ").append(        traceElement.getMethodName()).append("()").append("]");        String TAG = toStringBuffer.toString();        Log.w("\033[0;33m" + TAG,msg + "\033[0m");     }      public static void e(String msg) {        StackTraceElement traceElement = ((new Exception()).getStackTrace())[1];        StringBuffer toStringBuffer = new StringBuffer("[").append(        traceElement.getFileName()).append(" | ").append(        traceElement.getLineNumber()).append(" | ").append(        traceElement.getMethodName()).append("()").append("]");        String TAG = toStringBuffer.toString();        Log.e("\033[0;31m" + TAG,msg + "\033[0m");     }}

这段代码你可以自己定义到一个文件中 如log.java 放到你要开发的代码中直接调用log.d log.e等相应函数就可以了,你也可以放到frameworks层中的系统的Log.java中,只需要在Log.java里的d、e等函数里做一下上述修改,然后在调用jni函数println_native 就可以了。

c和c++中的可以用相应的宏就可以了,相对来说简单的多。c c++自定义的log函数看下篇文章。

打印的log截图:


更多相关文章

  1. C语言函数的递归(上)
  2. Android之分享篇(配图适合新人):腾讯分享(QQ空间,好友,群)
  3. Android中View.setPressed是怎么出现按压效果的
  4. Android(安卓)studio 快捷键,解决返回上次浏览位置ctrl+alt+left/
  5. Android(安卓)进阶之了解源码——Activity启动
  6. Android拓展 lua实现类似按键精灵效果
  7. 智能点餐系统开发纪实1-----java服务器搭建,android客户端实现通
  8. 搭建Android应用程序的服务器
  9. 从零开始--系统深入学习android(实践-让我们开始写代码-Android框

随机推荐

  1. Android(安卓)PhoneStateListener 问题
  2. Android(安卓)列表之分组ListView
  3. Android获取本机局域网IP的方法
  4. Android(安卓)之 添加按钮添加声音
  5. Android(安卓)JetPack-Navigation使用
  6. android 属性动画源码分析
  7. Android(安卓)Get Network Type获得网络
  8. Android(安卓)获取已安装应用使用的Permi
  9. Android(安卓)Native Crash的log分析和定
  10. Android判断当前正在通话(电话呼入)的状