相信大家在做应用调试的时候,不可能时时通过USB线连着电脑去查看log信息,所以,将应用的log信息保存到手机本地就很有必要了,有助我们从这些log信息中提取有用的部分,以解决一些bug,下面我把网上分享的代码中作了一些精简,作为开发者使用,个人觉得没必要通过用户上传给我们,用户上传的不需要这么庞大的log信息,仅仅那部分崩溃的log信息即可,可参考我的另外一篇blog:http://blog.csdn.net/weidi1989/article/details/7927273。

好了,废话不多说,直接分享封装好的log信息类:LogcatHelper

[java] view plaincopy
  1. package com.way.util;
  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.io.InputStreamReader;
  8. import android.content.Context;
  9. import android.os.Environment;
  10. /**
  11. * log日志统计保存
  12. *
  13. * @author way
  14. *
  15. */
  16. public class LogcatHelper {
  17. private static LogcatHelper INSTANCE = null;
  18. private static String PATH_LOGCAT;
  19. private LogDumper mLogDumper = null;
  20. private int mPId;
  21. /**
  22. *
  23. * 初始化目录
  24. *
  25. * */
  26. public void init(Context context) {
  27. if (Environment.getExternalStorageState().equals(
  28. Environment.MEDIA_MOUNTED)) {// 优先保存到SD卡中
  29. PATH_LOGCAT = Environment.getExternalStorageDirectory()
  30. .getAbsolutePath() + File.separator + "miniGPS";
  31. } else {// 如果SD卡不存在,就保存到本应用的目录下
  32. PATH_LOGCAT = context.getFilesDir().getAbsolutePath()
  33. + File.separator + "miniGPS";
  34. }
  35. File file = new File(PATH_LOGCAT);
  36. if (!file.exists()) {
  37. file.mkdirs();
  38. }
  39. }
  40. public static LogcatHelper getInstance(Context context) {
  41. if (INSTANCE == null) {
  42. INSTANCE = new LogcatHelper(context);
  43. }
  44. return INSTANCE;
  45. }
  46. private LogcatHelper(Context context) {
  47. init(context);
  48. mPId = android.os.Process.myPid();
  49. }
  50. public void start() {
  51. if (mLogDumper == null)
  52. mLogDumper = new LogDumper(String.valueOf(mPId), PATH_LOGCAT);
  53. mLogDumper.start();
  54. }
  55. public void stop() {
  56. if (mLogDumper != null) {
  57. mLogDumper.stopLogs();
  58. mLogDumper = null;
  59. }
  60. }
  61. private class LogDumper extends Thread {
  62. private Process logcatProc;
  63. private BufferedReader mReader = null;
  64. private boolean mRunning = true;
  65. String cmds = null;
  66. private String mPID;
  67. private FileOutputStream out = null;
  68. public LogDumper(String pid, String dir) {
  69. mPID = pid;
  70. try {
  71. out = new FileOutputStream(new File(dir, "GPS-"
  72. + MyDate.getFileName() + ".log"));
  73. } catch (FileNotFoundException e) {
  74. // TODO Auto-generated catch block
  75. e.printStackTrace();
  76. }
  77. /**
  78. *
  79. * 日志等级:*:v , *:d , *:w , *:e , *:f , *:s
  80. *
  81. * 显示当前mPID程序的 E和W等级的日志.
  82. *
  83. * */
  84. // cmds = "logcat *:e *:w | grep \"(" + mPID + ")\"";
  85. // cmds = "logcat  | grep \"(" + mPID + ")\"";//打印所有日志信息
  86. // cmds = "logcat -s way";//打印标签过滤信息
  87. cmds = "logcat *:e *:i | grep \"(" + mPID + ")\"";
  88. }
  89. public void stopLogs() {
  90. mRunning = false;
  91. }
  92. @Override
  93. public void run() {
  94. try {
  95. logcatProc = Runtime.getRuntime().exec(cmds);
  96. mReader = new BufferedReader(new InputStreamReader(
  97. logcatProc.getInputStream()), 1024);
  98. String line = null;
  99. while (mRunning && (line = mReader.readLine()) != null) {
  100. if (!mRunning) {
  101. break;
  102. }
  103. if (line.length() == 0) {
  104. continue;
  105. }
  106. if (out != null && line.contains(mPID)) {
  107. out.write((MyDate.getDateEN() + "  " + line + "\n")
  108. .getBytes());
  109. }
  110. }
  111. } catch (IOException e) {
  112. e.printStackTrace();
  113. } finally {
  114. if (logcatProc != null) {
  115. logcatProc.destroy();
  116. logcatProc = null;
  117. }
  118. if (mReader != null) {
  119. try {
  120. mReader.close();
  121. mReader = null;
  122. } catch (IOException e) {
  123. e.printStackTrace();
  124. }
  125. }
  126. if (out != null) {
  127. try {
  128. out.close();
  129. } catch (IOException e) {
  130. e.printStackTrace();
  131. }
  132. out = null;
  133. }
  134. }
  135. }
  136. }
  137. }

记得加上权限:

[html] view plaincopy
  1. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  2. <uses-permission android:name="android.permission.READ_LOGS" />

另外把那个时间的工具类也分享一下:

[java] view plaincopy
  1. package com.way.util;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Date;
  4. public class MyDate {
  5. public static String getFileName() {
  6. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  7. String date = format.format(new Date(System.currentTimeMillis()));
  8. return date;// 2012年10月03日 23:41:31
  9. }
  10. public static String getDateEN() {
  11. SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  12. String date1 = format1.format(new Date(System.currentTimeMillis()));
  13. return date1;// 2012-10-03 23:41:31
  14. }
  15. }

OK,所有事情做完之后,在我们的应用中start一下就OK了,使用完之后,记得调用一下stop:

[java] view plaincopy
  1. public class GPSApplication extends Application {
  2. @Override
  3. public void onCreate() {
  4. // TODO Auto-generated method stub
  5. LogcatHelper.getInstance(this).start();
  6. }
  7. }

原文:http://blog.csdn.net/way_ping_li/article/details/8487866

Android将应用log信息保存文件相关推荐

  1. android jni打印log信息

    今天,讲讲在jni中如何打印logxx,用来进行调试. 一.实现 1.修改Android.mk文件. 在这个配置文件中我们加入如下一行代码: LOCAL_LDLIBS += -llog 注意:这行代码 ...

  2. Linux中的密码信息保存文件

    0x00 前言 Linux系统下,用户的密码会被加密保存在文件/etc/shadow中,本文尝试对这一部分内容进行整理,介绍相关基础知识,测试常用方法,帮助大家对此有更直观的认识. 0x01 Linu ...

  3. Android11 热点配置信息保存分析

    Android11 热点配置信息保存分析 文章目录 Android11 热点配置信息保存分析 一.Android11 wifi和热点 配置信息保存的文件位置 1.wifi和热点保存的实际位置 2.wi ...

  4. Log保存文件-Android

    为什么80%的码农都做不了架构师?>>>    前言 在开发过程中尤其是项目进入测试后,为了方便定位问题,经常需要将log保存下来,当然你可以自己写个log辅助类又或者直接使用第三方 ...

  5. Android开发过程中在sh,py,mk文件中添加log信息的方法

    Android开发过程中在sh,py,mk文件中添加log信息的方法 在sh文件中: echo "this is a log info" + $info 在py文件中: print ...

  6. android中资源文件的两种访问方式,Android_Android学习笔记-保存文件(Saving Files),Android设备有两种文件存储区域 - phpStudy...

    Android学习笔记-保存文件(Saving Files) Android设备有两种文件存储区域: 内部存储和外部存储 ("internal" and "externa ...

  7. 【Android NDK 开发】NDK C/C++ 代码崩溃调试 - Tombstone 报错信息日志文件分析 ( 获取 tombstone_0X 崩溃日志信息 )

    文章目录 一.崩溃信息描述 二.手机命令行操作 三.电脑命令行操作 四.Tombstone 内容 Tombstone 报错信息日志文件被保存在了 /data/tombstones/ 目录下 , 先 R ...

  8. LINUX系统以及ANDROID 平台log信息输出级别设置 [MTK]

    一.LK层: 首先,在LK中,有一个对log打印级别的控制文档,其路径一般为:vendor\mediatek\proprietary\bootable\bootloader\lk\include\de ...

  9. Android中对Log日志文件的分析

    Android中对Log日志文件的分析 如何分析和研究Log文件 ,如何看日志信息 Log 在android中的地位非常重要,要是作为一个android程序员不能过分析log这关,算是android没 ...

  10. android 读取excel数据并保存为xml文件

    今天,简单讲讲android如何  读取excel数据并保存为xml文件. 最近,我这边需要把客户翻译的Excel字符资源作为xml字符资源,当时自己是一个一个的复制,发现效率太低.后来,在网上搜 ...

最新文章

  1. Python中函数的参数定义和可变参数
  2. 【济宁百瑞达机械设备有限公司——文化拓展学习】2018技术展望:利用现有IT投资扩大云部署...
  3. ios 边录音边放_关于Android和iOS系统OneNote支持边录音边记笔记的需求和建议
  4. OpenCV C++ 04 - Change Brightness
  5. python猫狗大战讲解_tensorflow实现猫狗大战(分类算法)
  6. Swagger如何访问Ocelot中带权限验证的API
  7. 对象创建型 - 单利模式
  8. android wchar t 中文,Android没有真正的wchar_t吗?
  9. 数据源中没有 datarow_Power BI Desktop 中的数据源
  10. pyspark 条件_删除pyspark中特定条件下的特定行
  11. 弘辽科技:淘宝改SKU图片会影响权重吗?
  12. python制作网页挂机_Python实现自动挂机脚本(GUI 打包)
  13. 开源驱动全球经济发展
  14. JS 缓存: Service Worker 实现离线应用
  15. 跨境公路货运调研分析-市场规模、市场份额、市场定位、产品类型以及发展规划
  16. 浩辰cad2017破解版|浩辰电气cad2017无限使用破解版下载
  17. 老男孩之《生日快乐》
  18. 现在最火爆的盲盒交友小程序源码
  19. 计算机网络安全运维管理工作总结,计算机设备日常运维工作总结
  20. K-Means聚类算法原理及其python和matlab实现

热门文章

  1. windows 内核进程的优先级_华为鸿蒙 OS 轻量内核设计理念与关键特性
  2. java脚本计算器按钮无反应_2020年3月份最新计算机语言排行,20种语言争锋相对Java依旧飘逸...
  3. c语言小游戏_打字游戏超细讲解(C语言基础小游戏)
  4. 学生选课系统代码--分析2需求分析
  5. python解析json文件三种_Python解析json文件相关知识学习
  6. 鞍山楷邦计算机学院,计算机专业和平面设计专业是一个专业不?
  7. 浙江理工大学机械复试c语言真题,2016年浙江理工大学机械与自动控制学院计算机应用基础)之C程序设计复试笔试最后押题五套卷...
  8. python只保留大写字母_python - 匹配某一行并保留大写字母?
  9. GAN 生成mnist数据
  10. foobar2000实现用手机远程控制PC命令行版