Log调试

标签: log 调试 | 发表时间:2012-11-06 09:38 | 作者:
出处:http://www.iteye.com

在开发中我们一定不能避免使用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

 

 

 

 

 

 

 

 

 

 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [log 调试] 推荐:

Log调试

- - ITeye博客
在开发中我们一定不能避免使用Log类,但是这个类存在一个问题就是,当你在程序中使用了大量的Log,那么在程序开发完毕的时候,这将是一个问题,因为,你需要将所有的Log记录注释掉(当然,你不注释也是可以的). 我们可以写一个类,将Log类包装起来,使用一个boolean来控制所有的Log记录的显示. public static final boolean isDebug = true;//这里控制所有Log的显示情况.

log file sync总结

- - 数据库 - ITeye博客
log file sync等待时间发生在redo log从log buffer写入到log file期间. 下面对log file sync做个详细的解释. 1.commit或者rollback. 3.log buffer 1/3满或者已经有1M的redo数据.       更精确的解释:_LOG_IO_SIZE 大小默认是LOG_BUFFER的1/3,当log buffer中redo数据达到_LOG_IO_SIZE 大小时,发生日志写入.

Oracle online redo log 扫盲

- - CSDN博客数据库推荐文章
Oracle 的日志分为:ONLINE REDO LOG 和 archived log. 一个数据库至少要有2组 redo log,每组 redo log 至少要有一个 member(出于安全考虑,建议每组 redo log 至少有 2 个多元化的 redo log member). redo log 循环使用,当一组日志写满后,就会切换到下一组日志.

必须了解的MySQL三大日志:binlog、redo log和undo log

- - DockOne.io
日志是 MySQL数据库的重要组成部分,记录着数据库运行期间各种状态信息. MySQL日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类. 作为开发,我们重点需要关注的是二进制日志( binlog)和事务日志(包括 redo log和 undo log),本文接下来会详细介绍这三种日志.

静态cache之log共现词分析

- - 搜索技术博客-淘宝
搜索引擎的log数据可以用于query理解、user理解、doc理解和ranking. 我们运行共现词分析,挖掘出引擎的query log里面共现的词,离线建静态cache,用于提升引擎的性能. 分析query log里query的平均的term数,值为5. 我们对query log依次进行一至四元共现词分析,高于四元的我们推荐用fullcache解决,而且高元的离线计算成本也太高.

[转]用mysqldumpslow分析mysql的slow query log

- - 小彰
mysql有一个功能就是可以log下来运行的比较慢的sql语句,默认是没有这个log的,为了开启这个功能,要修改my.cnf或者在mysql启动的时候加入一些参数. 如果在my.cnf里面修改,需增加如下几行. long_query_time 是指执行超过多久的sql会被log下来,这里是1秒. log-slow-queries 设置把日志写在那里,可以为空,系统会给一个缺省的文件 host_name-slow.log,我生成的log就在mysql的data目录.

log file sync等待超高一例

- - CSDN博客数据库推荐文章
这是3月份某客户的情况,原因是服务器硬件故障后进行更换之后,业务翻译偶尔出现提交缓慢的情况. 我们可以看到,该系统的load profile信息其实并不高,每秒才21个transaction. 先来看看top5events:. 从top 5event,我们可以发现,log file sync的avg wait非常之高,高达124ms.

InnoDB的log写入策略及主从同步

- 彦强 - 淘宝核心系统团队博客
      ib_logfile是InnoDB的事务日志文件. ib_logfile与bin-log共同控制事务恢复. 本文简要说明其写入时机、写入策略, 以及分析系统异常对主从数据一致性的影响. 1、              基本概念 .      a)        ib_logfile文件个数由innodb_log_files_in_group配置决定,若为2,则在datadir目录下有两个文件,命令从0开始,分别为ib_logfile0和ib_logfile1..

Oracle Tuning Log File Sync 等待事件的几种策略

- - CSDN博客数据库推荐文章
    在一个频繁 commit/rollback 或磁盘 I/O 有问题、大量物理读写争用.    那么、我们便会经常瞧见 LOG FILE SYNC 等待事件出现在 TOP EVENTS 中.    评估 LOG FILE SYNC等待事件的指标是平均等待时间、以及 AWR 后续的 WAIT EVENT HISTOGRAM.

Fatal Error log format,JVM 致命错误日志格式

- - 码蜂笔记
本文翻译自: http://www.oracle.com/technetwork/java/javase/felog-138657.html. 本文内容基于 Java SE 6,HotSpot JVM. 当一个致命错误发生时,一个错误日志将被创建,存储了在致命错误发生时获取到的信息和状态. 注意:这个文件的格式可能随着版本的更新而改变.