Android开发调试日志工具类[支持保存到SD卡]

直接上代码:

package com.example.callstatus;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Date;

import android.annotation.SuppressLint;
import android.os.Environment;
import android.util.Log;

/**
 * Android开发调试日志工具类[支持保存到SD卡]<br>
 * <br>
 *
 * 须要一些权限: <br>
 * <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <br>
 * <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><br>
 *
 * @author PMTOAM
 *
 */
@SuppressLint("SimpleDateFormat")
public class MyLog
{

	public static final String CACHE_DIR_NAME = "dPhoneLog";

	public static boolean isDebugModel = true;// 是否输出日志
	public static boolean isSaveDebugInfo = true;// 是否保存调试日志
	public static boolean isSaveCrashInfo = true;// 是否保存报错日志

	public static void v(final String tag, final String msg)
	{
		if (isDebugModel)
		{
			Log.v(tag, "--> " + msg);
		}
	}

	public static void d(final String tag, final String msg)
	{
		if (isDebugModel)
		{
			Log.d(tag, "--> " + msg);
		}
	}

	public static void i(final String tag, final String msg)
	{
		if (isDebugModel)
		{
			Log.i(tag, "--> " + msg);
		}
	}

	public static void w(final String tag, final String msg)
	{
		if (isDebugModel)
		{
			Log.w(tag, "--> " + msg);
		}
	}

	/**
	 * 调试日志,便于开发跟踪。

* @param tag
	 * @param msg
	 */
	public static void e(final String tag, final String msg)
	{
		if (isDebugModel)
		{
			Log.e(tag, "--> " + msg);
		}

		if (isSaveDebugInfo)
		{
			new Thread()
			{
				public void run()
				{
					write(time() + tag + " --> " + msg + "\n");
				};
			}.start();
		}
	}

	/**
	 * try catch 时使用。上线产品可上传反馈。

* @param tag
	 * @param tr
	 */
	public static void e(final String tag, final Throwable tr)
	{
		if (isSaveCrashInfo)
		{
			new Thread()
			{
				public void run()
				{
					write(time() + tag + " [CRASH] --> "
							+ getStackTraceString(tr) + "\n");
				};
			}.start();
		}
	}

	/**
	 * 获取捕捉到的异常的字符串
	 * @param tr
	 * @return
	 */
	public static String getStackTraceString(Throwable tr)
	{
		if (tr == null)
		{
			return "";
		}

		Throwable t = tr;
		while (t != null)
		{
			if (t instanceof UnknownHostException)
			{
				return "";
			}
			t = t.getCause();
		}

		StringWriter sw = new StringWriter();
		PrintWriter pw = new PrintWriter(sw);
		tr.printStackTrace(pw);
		return sw.toString();
	}

	/**
	 * 标识每条日志产生的时间
	 * @return
	 */
	private static String time()
	{
		return "["
				+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(
						System.currentTimeMillis())) + "] ";
	}

	/**
	 * 以年月日作为日志文件名
	 * @return
	 */
	private static String date()
	{
		return new SimpleDateFormat("yyyy-MM-dd").format(new Date(System
				.currentTimeMillis()));
	}

	/**
	 * 保存到日志文件
	 * @param content
	 */
	public static synchronized void write(String content)
	{
		try
		{
			FileWriter writer = new FileWriter(getFile(), true);
			writer.write(content);
			writer.close();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
	}

	/**
	 * 获取日志文件路径
	 * @return
	 */
	public static String getFile()
	{
		File sdDir = null;

		if (Environment.getExternalStorageState().equals(
				android.os.Environment.MEDIA_MOUNTED))
			sdDir = Environment.getExternalStorageDirectory();

		File cacheDir = new File(sdDir + File.separator + CACHE_DIR_NAME);
		if (!cacheDir.exists())
			cacheDir.mkdir();

		File filePath = new File(cacheDir + File.separator + date() + ".txt");

		return filePath.toString();
	}

}
时间: 2024-10-12 23:58:24

Android开发调试日志工具类[支持保存到SD卡]的相关文章

Android自定义照相机实现(拍照、保存到SD卡,利用Bundle在Acitivity交换数据)

Android自定义照相机实现 近期小巫在学校有一个创新项目,也不是最近,是一个拖了很久的项目,之前一直没有去搞,最近因为要中期检查,搞得我跟小组成员一阵忙活,其实开发一款照相机软件并不太难,下面就是通过自定义的方式来实现手机照相的功能. 创建一个项目:FingerTakePicture 首先来搞一下界面: <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&qu

wemall app商城源码android开发MD5加密工具类

wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享android开发MD5加密工具类主要代码,供技术员参考学习. package com.gzcivil.utils; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgori

Android开发 将数据保存到SD卡

前言: 使用Activity的openFileOutput()方法保存文件,文件是存放在手机空间上,一般手机的存储空间不是很大,存放些小文件还行,如果要存放像视频这样的大文件,是不可行的.对于像视频这样的大文件,我们可以把它存放在SDCard. SDCard是干什么的?你可以把它看作是移动硬盘或U盘. 在模拟器中使用SDCard,你需要先创建一张SDCard卡(当然不是真的SDCard,只是镜像文件).创建SDCard可以在Eclipse创建模拟器时随同创建,也可以使用DOS命令进行创建,如下:

Android相机、相册获取图片显示(压缩)并保存到SD卡

做过类似需求的同学都知道,在Activity中通过如下代码可以启动相机,然后在重写的onActivityResult方法中可以获取到返回的照片数据: Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(openCameraIntent, TAKE_PICTURE); 在onActivityResult方法里通过Intent的getData方法获取的数据转换成bi

Android—将Bitmap图片保存到SD卡目录下或者指定目录

直接上代码就不废话啦 一:保存到SD卡下 [java] view plain copy File file = new File(Environment.getExternalStorageDirectory(), System.currentTimeMillis()+".jpg"); try { out = new FileOutputStream(file); btImage.compress(Bitmap.CompressFormat.JPEG, 90, out); System

android文件保存到sd卡和内存

1.保存到SD卡中: 获取SDCard的状态: Environment.getExtemalStorageState() Environment.MEDIA_MOUNTED手机装有SDCard,并且可以进行读写 获取SDCard的目录:Environment.getExtemalStorageDirectory() //============================================= File saveFile=new File("/sdcard/zhzhg.txt&q

Android---6---将数据保存到SD卡

同样是实现上一篇文章中所需要的功能,只不过这次是将数据保存到SD卡中. MainActivity.java package com.example.qqlogin; import java.util.Map; import com.example.qqlogin.utils.utils; import com.example.qqlogin.utils.utilsOfSDCard; import android.app.Activity; import android.os.Bundle; im

Android LogUtils打印日志工具类

LogUtils打印日志工具类 这是一个从XUtils3中摘抄出来的打印日志工具类.这个类打印日志比较详细,可以打印类名.方法名.isDebug为打印日志开关,初始化的时候可以使用LogUtils.isDebug(boolean b)来控制开关状态. public class LogUtils { public static String customTagPrefix = "x_log"; private static boolean isDebug = true; private

Android将数据库保存到SD卡的实现

??有时候为了需要,会将数据库保存到外部存储或者SD卡中(对于这种情况可以通过加密数据来避免数据被破解),比如一个应用支持多个数据,每个数据都需要有一个对应的数据库,并且数据库中的信息量特别大时,这显然更应该将数据库保存在外部存储或者SD卡中,因为RAM的大小是有限的:其次在写某些测试程序时将数据库保存在SD卡更方便查看数据库中的内容. ??Android通过SQLiteOpenHelper创建数据库时默认是将数据库保存在'/data/data/应用程序名/databases'目录下的,只需要在