Android开发时经常用的LogUtil
来源:互联网 发布:上海美猴网络面试 编辑:程序博客网 时间:2024/05/23 01:11
在开发过程中经常用到Log,我们常写的一种方式就是自定义一个LogUtil工具类
private static boolean LOGV = true; private static boolean LOGD = true; private static boolean LOGI = true; private static boolean LOGW = true; private static boolean LOGE = true; public static void v(String tag, String mess) { if (LOGV) { Log.v(tag, mess); } } public static void d(String tag, String mess) { if (LOGD) { Log.d(tag, mess); } } public static void i(String tag, String mess) { if (LOGI) { Log.i(tag, mess); } } public static void w(String tag, String mess) { if (LOGW) { Log.w(tag, mess); } } public static void e(String tag, String mess) { if (LOGE) { Log.e(tag, mess); } }
这样的工具类可以将log分类,在发布应用时选择性关闭log,比较方便。
但问题是,跟直接使用Log类似,需要定义一个TAG,常用的办法是在每个需要打log的类定义一个静态字符串常量TAG,赋值为类名。如果,在重构时忘记修改TAG,这样在查看log时就可能会迷糊。当然,也有很多人会图方便,直接用System.out.println(str);输出。
前两天看VolleyLog时,学习到一种新的方法,
private static String getTag() { StackTraceElement[] trace = new Throwable().fillInStackTrace() .getStackTrace(); String callingClass = ""; for (int i = 2; i < trace.length; i++) { Class<?> clazz = trace[i].getClass(); if (!clazz.equals(LogUtil.class)) { callingClass = trace[i].getClassName(); callingClass = callingClass.substring(callingClass .lastIndexOf('.') + 1); break; } } return callingClass; }
这个方法可以直接获取到调用者的类名。使用如下:
public static void v(String mess) { if (LOGV) { Log.v(getTag(), mess); } } public static void d(String mess) { if (LOGD) { Log.d(getTag(), mess); } } public static void i(String mess) { if (LOGI) { Log.i(getTag(), mess); } } public static void w(String mess) { if (LOGW) { Log.w(getTag(), mess); } } public static void e(String mess) { if (LOGE) { Log.e(getTag(), mess); } }
如此就不需要再在类中定义TAG了。
在调试程序时,我们会经常打印一些信息,包括方法名/行号之类的,下面一个方法就可以省去这些麻烦:
private static String buildMessage(String msg) { StackTraceElement[] trace = new Throwable().fillInStackTrace() .getStackTrace(); String caller = ""; for (int i = 2; i < trace.length; i++) { Class<?> clazz = trace[i].getClass(); if (!clazz.equals(LogUtil.class)) { caller = trace[i].getMethodName(); break; } } return String.format(Locale.US, "[%d] %s: %s", Thread.currentThread() .getId(), caller, msg); }
使用方法如下:
public static void v(String mess) { if (LOGV) { Log.v(getTag(), buildMessage(mess)); } } public static void d(String mess) { if (LOGD) { Log.d(getTag(), buildMessage(mess)); } } public static void i(String mess) { if (LOGI) { Log.i(getTag(), buildMessage(mess)); } } public static void w(String mess) { if (LOGW) { Log.w(getTag(), buildMessage(mess)); } } public static void e(String mess) { if (LOGE) { Log.e(getTag(), buildMessage(mess)); } }
这样每次打印log的时候就很方便了,直接键入:LogUtil.v(msg);
不需要管TAG,方法名,还有线程ID等等信息
再一步优化就是格式化msg的内容
buildMessage(String format, Object... args)
最后说明一下,如果大量log这样打会影响程序的性能,所以这样的方法只是方便在调试时使用,在发布时,可以把调试的log关闭掉。
0 1
- Android开发时经常用的LogUtil
- Android开发时经常用的LogUtil
- Android开发LogUtil
- Android常用的简单LogUtil.
- Log4j For Android 和LogUtil的使用
- Log4j For Android 和LogUtil的使用
- Android开发实用技巧之三:定制自己的日志工具LogUtil.java
- android工具类LogUtil
- 经常用的开发工具
- Android开发中经常遇到的问题
- Android开发中经常用到的工具
- Android之系统Log输出日志的封装类LogUtil
- Android之系统Log输出日志的封装类LogUtil
- android 编程小技巧(1)---超实用的LogUtil
- xutils3 的 LogUtil使用
- Kotlin的LogUtil
- 经常用的android细节
- android 开发时 服务器端经常得到乱码
- 特别篇-SetWindowExtEx,SetViewportExtEx解析
- MYSQL的索引类型:PRIMARY, INDEX,UNIQUE,FULLTEXT,SPAIAL
- Unity3d如何读写XML文件
- XUtils数据库的简单使用;
- 类的扩展
- Android开发时经常用的LogUtil
- uva 11045 My T-shirt suits me (二分图匹配 最大流)
- ios下inhouse发布相关代码
- [黑马程序员](第10-15天)集合类(下)
- QueryPerformanceFrequency()
- 电梯调度算法问题
- Springmvc 默认首页的问题
- android studio 运行代码时device不能识别genymotion设备
- linux grep 详解