直接上代码:

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. 2008r2 做windows域控制器

    新配一个: 1.装DNS服务. 2.装domain管理. config domain: 客户端172.16.1.34  ping zyctest

  2. Java中的位运算符、移位运算

    一.位运算 Java中有4个位运算,它们的运算规则如下: (1)按位与 (&)  :两位全为1,结果为1,否则为0: (2)按位或  (|)   :两位有一个为1,结果为1,否则为0: (3) ...

  3. Jquery学习笔记: attr和 prop的区别,以及为html标签自定义属性

    一.自定义html标签属性 对于html文件中的html标签,可以自定义属性,如: <a href="#" id="link1" action=" ...

  4. Git命令非主流札记

    使用git做开发的版本管理也有一年半之多了,但是始终都是常用的branch commit status diff push等一些再常用不过的命令,最近闲下来,打算学习一下高端用法,所以就静下心来好好读 ...

  5. perl 传递对象到模块

    perl 中的对象 就是引用 通过new方法传递数据结构给各个模块 [root@wx03 test]# cat x1.pm package x1; use Data::Dumper; sub new ...

  6. Java基础:多态(重载和重写)

    转载请注明出处:jiq•钦's technical Blog (1)域与静态方法 记住"仅仅有普通方法的调用是多态的". 而域和静态方法不是:对于域的訪问.在编译期间就已经进行解析 ...

  7. Tuxedo入门学习

    中间件介绍: 介于客户机和server之间的夹层,突破了传统的c/s架构,为构建大规模,高性能,分布式c/s应用程序提供了通信,事物,安全,容错等基础服务,屏蔽了底层应用细节,应用程序不必从底层开发, ...

  8. 基于visual Studio2013解决C语言竞赛题之1038数字验证

          题目 解决代码及点评 /********************************************************************** ...

  9. Javascript 调试利器 Firebug使用详解

    Javascript 调试利器 Firebug使用详解 有时候,为了更清楚方便的查看输出信息,我们可能需要将一些调试信息进行分组输出,那么可以使用console.group来对信息进行分组,在组信息输 ...

  10. NodeJS会是昙花一现吗?

    在用了一年以后,我感觉node.js有一点不正确劲.它非常有意思,可是我认为我应该用另外一个视角去审视它. 网络编程真的能够更easy吗? node.js无疑有一些设计很好的地方.前段时间我写了一个性 ...