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