Android技巧之封装Log工具类
来源:互联网 发布:天猫和淘宝价格对比 编辑:程序博客网 时间:2024/04/30 12:10
1.前言
开发过程中打日志已成为我们平时Debug调试不可缺少的一部分,Android SDK给我们也提供了很不错的工具类,并且分了不同的日志级别:Log.v() Log.d() Log.i() Log.w() and Log.e() 分别对应 VERBOSE,DEBUG,INFO, WARN, ERROR,其中Verbose不会在release版本中被编译进应用程序包中,而Debug日志根据Android API说会在运行时被去掉,另外的三个则会一直被保留。
2.问题
官方建议我们打日志的通用做法是:在你的类中声明一个常量TAG,如下
private static final String TAG = "MyActivity";
使用:
Log.v(TAG, "index=" + i);
细心的童鞋可能觉得官方给的有很多不足的地方,例如每个类都要声明TAG,日志不能追踪哪个类,哪个方法、哪一行,某些日志在App发布时不能自动删除,还需要手动修改或者删除等等。这里针对这些问题整理一些小技巧。
3.实践
1.去掉TAG:我们可以用类名来作为TAG的内容,获取方法名和行数:
private static void getMethodNames(StackTraceElement[] sElements){ className = sElements[1].getFileName(); methodName = sElements[1].getMethodName(); lineNumber = sElements[1].getLineNumber();}
2.发布时去除日志
Android的BuildConfig有一个很合适的DEBUG可以用,它在你发布release版本,这个bool值自动变为false;所以我们可以利用这一点,重新定义写Log的方法:
public static void v(String message){ if (!BuildConfig.DEBUG) return; getMethodNames(new Throwable().getStackTrace()); Log.v(className, createLog(message));}
3.封装成方法
private static String createLog( String log ) { StringBuffer buffer = new StringBuffer(); buffer.append(methodName); buffer.append("(").append(className).append(":").append(lineNumber).append(")"); buffer.append(log); return buffer.toString();}
这样出来的结果就是:可以通过连接直接跳转到指定的文件的那一行
当然你也可以根据自己的喜好,修改要打印出来的格式。
完整代码:
public class LogUtils { static String className;//类名 static String methodName;//方法名 static int lineNumber;//行数 private LogUtils(){ /* Protect from instantiations */ } public static boolean isDebuggable() { return BuildConfig.DEBUG; } private static String createLog( String log ) { StringBuffer buffer = new StringBuffer(); buffer.append(methodName); buffer.append("(").append(className).append(":").append(lineNumber).append(")"); buffer.append(log); return buffer.toString(); } private static void getMethodNames(StackTraceElement[] sElements){ className = sElements[1].getFileName(); methodName = sElements[1].getMethodName(); lineNumber = sElements[1].getLineNumber(); } public static void e(String message){ if (!isDebuggable()) return; // Throwable instance must be created before any methods getMethodNames(new Throwable().getStackTrace()); Log.e(className, createLog(message)); } public static void i(String message){ if (!isDebuggable()) return; getMethodNames(new Throwable().getStackTrace()); Log.i(className, createLog(message)); } public static void d(String message){ if (!isDebuggable()) return; getMethodNames(new Throwable().getStackTrace()); Log.d(className, createLog(message)); } public static void v(String message){ if (!isDebuggable()) return; getMethodNames(new Throwable().getStackTrace()); Log.v(className, createLog(message)); } public static void w(String message){ if (!isDebuggable()) return; getMethodNames(new Throwable().getStackTrace()); Log.w(className, createLog(message)); } public static void wtf(String message){ if (!isDebuggable()) return; getMethodNames(new Throwable().getStackTrace()); Log.wtf(className, createLog(message)); }}
来自:http://yuxingxin.com/2015/10/26/AndroidLog/
1 2
- Android技巧之封装Log工具类
- Android项目工具类之封装Log工具类
- Android 编程技巧之 ----- 自定义 Log 工具
- Android开发之封装log打印日志的工具类,实用logutils详细代码
- Android Log类封装
- 封装的log工具类
- Log工具类(简单封装)
- Android之工具类封装
- 工具类的封装--Log封装
- Android常用工具类之 Log工具类
- Android 编写工具类之Log
- Android分享之Log工具类
- Android之系统Log输出日志的封装类LogUtil
- Android之系统Log输出日志的封装类LogUtil
- android----Log类的封装
- Android Log工具之Luffy
- Android:log工具类
- android log工具类
- 阿里云上CentOS6.5部署Django+nginx+uwsgi
- android 蓝牙编程重点---如何发送和接收16进制数据
- 网站锚点执行平滑滚动
- 用次世代2.3训练自己的字符库cds小demo
- 最全整理浏览器兼容性问题与解决方案
- Android技巧之封装Log工具类
- iOS开发网络篇—数据缓存
- android蓝牙开发---与蓝牙模块进行通信
- PhalGo-介绍 PhalGo-介绍
- 使用golang抓取京东商品数据
- MT4中Dll调用详解
- ActiveMQ使用步骤--- 开发测试环境搭建及Java用例
- Android控件系列之RadioButton&RadioGroup
- 虚幻4开发环境安装