直接上代码:

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

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

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

    Android自定义照相机实现 近期小巫在学校有一个创新项目,也不是最近,是一个拖了很久的项目,之前一直没有去搞,最近因为要中期检查,搞得我跟小组成员一阵忙活,其实开发一款照相机软件并不太难,下面就是 ...

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

    wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享android开发MD5加密工具类主要代码,供 ...

  3. Android相机、相册获取图片显示并保存到SD卡

    Android相机.相册获取图片显示并保存到SD卡 [复制链接]   电梯直达 楼主    发表于 2013-3-13 19:51:43 | 只看该作者 |只看大图  本帖最后由 happy小妖同学 ...

  4. [置顶] Android学习系列-把文件保存到SD卡上面(6)

    Android学习系列-把文件保存到SD卡上面(5) 一般多媒体文件,大文件需要保存到SD卡中.关键点如下: 1,SD卡保存目录:mnt/sdcard,一般采用Environment.getExter ...

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

    直接上代码就不废话啦 一:保存到SD卡下 File file = new File(Environment.getExternalStorageDirectory(), System.currentT ...

  6. Android 将文件保存到SD卡,从卡中取文件,及删除文件

    //保存到SD卡 private static String sdState = Environment.getExternalStorageState();     private static S ...

  7. Libgdx实现异步加载网络图片并保存到SD卡或者data/data目录下边

    Libgdx实现异步加载网络图片并保存到SD卡或者data/data目录下边,当本地有图片的时候,直接从本地读取图片,如果本地没有图片,将从服务器异步加载图片 package com.example. ...

  8. Linux笔记(开机自动将kerne log保存到SD卡中)

    有时候为了测试机器的稳定性,需要煲机测试几天的情况,这个时候机器已经封装好,不能再接串口线出来. 为了追溯问题,就需要将log信息保存下来. 于是就需要这样一个功能:系统启动后,自动将kernel的l ...

  9. Android utils 之 日志工具类

    工具类 在开发的过程中,我们时常会对代码执行特定的处理,而这部分处理在代码中可能多次用到,为了代码的统一性.规范性等,通过建工具类的方式统一处理.接下来我会罗列各种工具类. 日志工具类 在utils文 ...

随机推荐

  1. 解决 RichTextBox 文件格式不对问题

    RichTextBox文件格式不对: 原因:富文本框的LoadFile方法只支持RTF格式的文件或者标准的ASCII文本本档,,我们一般的文本文档是ANSI或者UTF-8的格式,所以,报这个错. 解决 ...

  2. Ibatis调用存储过程实现增删改以及分页查询

    1.Ibatis实现增删改操作很简单了,通常我是将某一模块的增删改功能写在一个存储过程里,通过一个标识符去区分执行增加还是修改抑或删除操作. statement: <!-- 存储过程:实现学生的 ...

  3. 使用ant的war任务打包j2ee web项目

    <?xml version="1.0" encoding="UTF-8"?> <project name="antwebprojec ...

  4. iOS开发之iOS7设置状态栏字体颜色

    应用中登陆界面颜色较浅,状态栏字体颜色为黑色,跳转到主界面之后,界面颜色较深,状态栏颜色随之变成白色.但是再重新返回登陆界面后,状态栏字体颜色并没有改成黑色,特别别扭. plist文件里将View c ...

  5. Linux - 输入输出流程序 代码(C)

    输入输出流程序 代码(C) 本文地址:http://blog.csdn.net/caroline_wendy 使用输入输出流,控制文件流. STDIN_FILENO,STDOUT_FILENO代表标准 ...

  6. CentOS: make menuconfig error: curses.h: No such file or directory

    the problem  when use centos5 to build kernel or busybox step 1. Centos中关于 ncurses.h:no such file or ...

  7. c语言,结构体里面的函数

    以linux-3.2内核代码为例,结构体里面的函数的用法: 例,在某驱动文件中,定义了一个平台设备驱动: static struct platform_driver s3c24xx_led_drive ...

  8. WCF技术剖析之二十: 服务在WCF体系中是如何被描述的?

    原文:WCF技术剖析之二十: 服务在WCF体系中是如何被描述的? 任何一个程序都需要运行于一个确定的进程中,进程是一个容器,其中包含程序实例运行所需的资源.同理,一个WCF服务的监听与执行同样需要通过 ...

  9. [置顶] Objective-C ,ios,iphone开发基础:UIAlertView使用详解

    UIAlertView使用详解 Ios中为我们提供了一个用来弹出提示框的类 UIAlertView,他类似于javascript中的alert 和c#中的MessageBox(); UIAlertVi ...

  10. __autoload()方法

    php中__autoload()方法详解 PHP在魔术函数__autoload()方法出现以前,如果你要在一个程序文件中实例化100个对象,那么你必须用include或者require包含进来100个 ...