Android开发调试日志工具类[支持保存到SD卡]
2016-01-13 20:01
645 查看
直接上代码:
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 调用闪光灯
- android端搭建端口服务端
- 各种各样与Android学习有关的网址收藏
- Android经典例子收藏笔记2
- android和js互相调用
- Android短信监听(二)——利用ContentObserver实现短信监听
- Android 打开文件对话框与保存文件对话框
- Android6.0之运行时权限
- android 实现自定义键盘的实例
- Android 4.4 Graphic系统详解(2) VSYNC的生成
- android异步加载图片并缓存到本地实现方法
- Android 关于SVG矢量图支持
- Android 自定义EditText 实现获得焦点并且有内容显示右侧图片并点击清空内容
- Android之史上最全最简单最有用的第三方开源库收集整理
- Android TextView加载Html语句
- Android Volley二次封装
- Android PopupWindow的使用
- android基础学习004_Android listview与adapter用法
- 使用Vitamio打造自己的Android万能播放器—— 手势控制亮度、音量、缩放
- android四大组件---service