Log认识:
开发中除了代码,注释和log也是必不可少的一部分,详细的注释和关键的log可以为我们开发提供很好的测试和分析。
Android sdk为我们提供了Log类的API,并且分了不同的日志级别:
Log.v()
Log.d()
Log.i()
Log.w()
Log.e()
分别对应
VERBOSE、DEBUG、INFO、 WARN、 ERROR、
其中Verbose不会在release版本中被编译进应用程序包中,而Debug日志根据Android API说会在运行时被去掉,另外的三个则会一直被保留。
查看官方文档给出的用法:
官方建议我们打日志的通用做法是:在你的类中声明一个常量TAG,但如每个类都要声明TAG,日志不能追踪哪个类,哪个方法、哪一行,某些日志在App发布时不能自动删除,还需要手动修改或者删除等等。这里针对这些问题整理一些小技巧
封装自己的LogUtils:
1:去掉TAG:我们可以用类名来作为TAG的内容,获取方法名和行数:
2:发布时去除日志 ,Android的BuildConfig有一个很合适的DEBUG可以用,它在你发布release版本,这个bool值自动变为false;所以我们可以利用这一点,重新定义写Log的方法:
3:封装log打印格式的方法(也可以根据自己的习惯,修改定义):
4:LogUtils封装源码:
/*** 对系统给出的Log的API进行封装** @author Smart*/public class LogUtils {static String packageName = "com.horizon.fmtx";static String className; // 类名static String methodName; // 方法名static int lineNumber; // 行数// 私有化方法private LogUtils() {}/*** 判断当前的是否为debug版本** @return true是debug版本 false debug版本*/public static boolean isDebuggable() {return BuildConfig.DEBUG;}/*** 封装需要打印Log的格式** @param log 要打印的具体log* @return 返回添加了类名、方法名、行号及打印log的 字符串*/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();}/*** StackTraceElement表示StackTrace(堆栈轨迹)中的一个元素,属性包括方法调用者的类名、方法名、文件名以及调用的行数。* 通过StackTraceElement来获取打印log的方法所在类名、行号、方法名等。* @param sElements*/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;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));}}
1042

被折叠的 条评论
为什么被折叠?



