Log调试

在开发中我们一定不能避免使用Log类,但是这个类存在一个问题就是,当你在程序中使用了大量的Log,那么在程序开发完毕的时候,这将是一个问题,因为,你需要将所有的Log记录注释掉(当然,你不注释也是可以的)。那么有没有方便的方法来处理呢?

我们可以写一个类,将Log类包装起来,使用一个boolean来控制所有的Log记录的显示。

比如这样:

MyLog.java:

public class MyLog {

	public static final boolean isDebug = true;//这里控制所有Log的显示情况

	public static void e(String tag, String message) {
		e(tag, message, null);
	}

	public static void e(String tag, String message, Throwable t) {
		if (isDebug)
			Log.e(tag, message, t);
	}

	public static void v(String tag, String message) {
		v(tag, message, null);
	}

	public static void v(String tag, String message, Throwable t) {
		if (isDebug)
			Log.v(tag, message, t);
	}

	public static void i(String tag, String message) {
		i(tag, message, null);
	}

	public static void i(String tag, String message, Throwable t) {
		if (isDebug)
			Log.i(tag, message, t);
	}

	public static void d(String tag, String message) {
		d(tag, message, null);
	}

	public static void d(String tag, String message, Throwable t) {
		if (isDebug)
			Log.d(tag, message, t);
	}

	public static void w(String tag, String message) {
		w(tag, message, null);
	}

	public static void w(String tag, String message, Throwable t) {
		if (isDebug)
			Log.w(tag, message, t);
	}
}
 

这样,你只要控制 isDebug这个boolean的true和false就可以了。

还有一个地方你可以参考下,那就是我们一般在开发的时候,在打印的时候一般我们使用Log打印,第一个参数设置为该类的类名

一般可以这样定义:

private String TAG = "MainActivity";

 然后在打印的时候:

Log.d(TAG, "jump to another activity!");
 

我们知道,在实际开发中我们会写一个Activity的基类,一般叫BaseActivity,在这个基类中我们一般对所有Activity具有的公共属性方法进行统一处理,同样,我们可以在这个类中覆盖所有的生命周期方法,这样做有什么好处呢?我们先看代码:

BaseActivity.java:

/**
 * 基类
 * 
 * 
 * */
public class BaseActivity extends Activity{

	protected String TAG = BaseActivity.this.getClass().getName();
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);

//		requestWindowFeature(Window.FEATURE_NO_TITLE);//设置无标题
		MyLog.v(TAG, "onCreate");
		
	}
	
	@Override
	public void onStart() {
		super.onStart();

		MyLog.v(TAG, "onStart");

	}

	@Override
	protected void onResume() {

		super.onResume();
		MyLog.v(TAG, "onResume");

	}
	
	@Override
	public void onAttachedToWindow() {
		super.onAttachedToWindow();

		MyLog.v(TAG, "onAttachedToWindow");

	}
	
	@Override
	protected void onPause() {
		super.onPause();

		MyLog.v(TAG, "onPause");

	}
	
	@Override
	public void onStop() {
		super.onStart();

		MyLog.v(TAG, "onStop");

	}
	
	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();

		MyLog.v(TAG, "onDestroy");
	}

	
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		MyLog.v(TAG, "requestCode:" + requestCode + ",resultCode:"
				+ resultCode + ",data:" + data);
	}

	@Override
	protected void onRestoreInstanceState(Bundle inState) {
		MyLog.v(TAG, "onRestoreInstanceState");
		super.onRestoreInstanceState(inState);

	}

	@Override
	protected void onSaveInstanceState(Bundle outState) {
		MyLog.v(TAG, "onSaveInstanceState");
		super.onSaveInstanceState(outState);

	}
	
	
}

这样做的好处就是:

1.当你写的Activity继承自BaseActivity的时候,你可以很方便的看到这个Activity的生命周期执行过程。

2.当你需要打印日志的时候,不需要再定义TAG了,在BaseActivity中自动就生成了,记住,this关键字表示的是,谁调用,this就代表谁。

protected String TAG = BaseActivity.this.getClass().getName(); 

当子类继承自BaseActivity的时候,这个TAG就是这个类的类名,将它设置为protected,那么子类就可以使用这个TAG了。这样做是不是比较方便呢?

我将上面的代码整理成一个Demo,有兴趣的同学可以去下载:

https://github.com/michaelye/LogDemo

猜你喜欢

转载自michaelye1988.iteye.com/blog/1717240