好记性不如铅笔头

android, 编程

Android应用开发笔记:日志和程序异常检测

一般android程序为了debug方便,都会加上日志和程序检测。这里备份下代码。

github【 https://github.com/cstriker1407/android/tree/master/BaseApp 】

CONTENTS

1)程序异常检测

1)声明一个类实现Thread.UncaughtExceptionHandler接口。

public class ThreadCrashHandler implements Thread.UncaughtExceptionHandler
{
	private static final String tag = "ThreadCrashHandler";
	private static final int MAX_STREAM_LENGTH = 1024;
	
	private String threadName;

	public ThreadCrashHandler(String threadName)
	{
		super();
		this.threadName = threadName;
	}

	@Override
	public void uncaughtException(Thread thread, Throwable ex)
	{
		Log.e(tag, String.format("Thread:%s is crashed", threadName));
		if (null == ex)
		{
			return;
		}
		Log.e(tag, ex.toString());
		
		ByteArrayOutputStream stream = new ByteArrayOutputStream(MAX_STREAM_LENGTH);
		PrintStream ps = new PrintStream(stream);
		ex.printStackTrace(ps);
		ps.flush();
		ps.close();
		Log.e(tag, stream.toString());
		try
		{
			stream.close();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
	}

	@Override
	public String toString()
	{
		return threadName + super.toString();
	}
}

 2)在自定义的APP里面使用它。

public class BaseApp extends Application
{
	@Override
	public void onCreate()
	{
		super.onCreate();
		Thread.setDefaultUncaughtExceptionHandler(new ThreadCrashHandler("BaseApp"));
	}
}

 备注:https://code.google.com/p/android-logging-log4j/downloads/list

1)关于程序异常检测,网上有很多资料,基本上都是使用这种方法。

2)其他参考【 http://blog.csdn.net/liuhe688/article/details/6584143 】【 http://blog.csdn.net/zkw12358/article/details/11097649 】

2)日志写入sd卡–Log4J方式

android可以通过log4j的开源库来写入日志,不过需要另外一个开源库【 android-logging-log4j 】的配合。

1)下载开源库。

下载Log4J:【 http://logging.apache.org/log4j/1.2/download.html 】

下载android-logging-log4j:【 https://code.google.com/p/android-logging-log4j/downloads/list 】

2)将开源库放到工程的libs目录下。

3)代码实现。

public class SDLog
{
	private static final Logger log = Logger.getLogger(SDLog.class);

	private static boolean bLogToFile = false;
	
	public static void initLog()
	{
        final LogConfigurator logConfigurator = new LogConfigurator();
        
        logConfigurator.setFileName("/mnt/sdcard/sss.log");

        /*
         * http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html
         */
        logConfigurator.setLogCatPattern("%m%n");
        logConfigurator.setFilePattern("%d - [%p] - %m%n");
        logConfigurator.setRootLevel(Level.DEBUG);
        logConfigurator.setLevel("org.apache", Level.DEBUG);
    
        try
		{
			logConfigurator.configure();
		}
		catch (Exception e)
		{
			bLogToFile = false;
			e.printStackTrace();
		}
        bLogToFile = true;

	
	}
	
	private static String logFmt(String tag,String msg)
	{
		return String.format("%s==>%s", tag, msg);
	}
	
    public static int d(String tag, String msg) 
    {
    	if (bLogToFile)
    	{
    		log.debug(logFmt(tag,msg));
    	}else
    	{
    		Log.d(tag, msg);
    	}
    	return 1; 
    }
    public static int e(String tag, String msg) 
    {
    	if (bLogToFile)
		{
    		log.error(logFmt(tag,msg));
		}
		else
		{
			Log.e(tag, msg);
		}
    	return 1;
    }
}

 4)初始化及使用方法。

public class BaseApp extends Application
{
	@Override
	public void onCreate()
	{
		super.onCreate();

		SDLog.initLog();
		SDLog.d("", "hello world");
	}
}

 备注:

1)日志的内容形式和Log4J的差不多,如果要定制可以参考【 http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html 】

2)我的习惯是在Application里面初始化日志工具类。

3)更多的参考可以搜索网上资源或者查看android-logging-log4j的官网,上面有详细的介绍。

3)日志写入SD卡–microlog4android方式

另一种写入sd卡的方法使用microlog4android【 http://code.google.com/p/microlog4android/downloads/list 】。

备注:

1)网上有很多的关于microlog4android的介绍,这里没有代码备份,后续需要补上。

发表评论

18 − 8 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据