Android LogUtils封装

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));

	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值