`
djun100
  • 浏览: 183641 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

Android将应用log信息保存文件

 
阅读更多

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

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

  1. packagecom.way.util;
  2. importjava.io.BufferedReader;
  3. importjava.io.File;
  4. importjava.io.FileNotFoundException;
  5. importjava.io.FileOutputStream;
  6. importjava.io.IOException;
  7. importjava.io.InputStreamReader;
  8. importandroid.content.Context;
  9. importandroid.os.Environment;
  10. /**
  11. *log日志统计保存
  12. *
  13. *@authorway
  14. *
  15. */
  16. publicclassLogcatHelper{
  17. privatestaticLogcatHelperINSTANCE=null;
  18. privatestaticStringPATH_LOGCAT;
  19. privateLogDumpermLogDumper=null;
  20. privateintmPId;
  21. /**
  22. *
  23. *初始化目录
  24. *
  25. **/
  26. publicvoidinit(Contextcontext){
  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. Filefile=newFile(PATH_LOGCAT);
  36. if(!file.exists()){
  37. file.mkdirs();
  38. }
  39. }
  40. publicstaticLogcatHelpergetInstance(Contextcontext){
  41. if(INSTANCE==null){
  42. INSTANCE=newLogcatHelper(context);
  43. }
  44. returnINSTANCE;
  45. }
  46. privateLogcatHelper(Contextcontext){
  47. init(context);
  48. mPId=android.os.Process.myPid();
  49. }
  50. publicvoidstart(){
  51. if(mLogDumper==null)
  52. mLogDumper=newLogDumper(String.valueOf(mPId),PATH_LOGCAT);
  53. mLogDumper.start();
  54. }
  55. publicvoidstop(){
  56. if(mLogDumper!=null){
  57. mLogDumper.stopLogs();
  58. mLogDumper=null;
  59. }
  60. }
  61. privateclassLogDumperextendsThread{
  62. privateProcesslogcatProc;
  63. privateBufferedReadermReader=null;
  64. privatebooleanmRunning=true;
  65. Stringcmds=null;
  66. privateStringmPID;
  67. privateFileOutputStreamout=null;
  68. publicLogDumper(Stringpid,Stringdir){
  69. mPID=pid;
  70. try{
  71. out=newFileOutputStream(newFile(dir,"GPS-"
  72. +MyDate.getFileName()+".log"));
  73. }catch(FileNotFoundExceptione){
  74. //TODOAuto-generatedcatchblock
  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-sway";//打印标签过滤信息
  87. cmds="logcat*:e*:i|grep\"("+mPID+")\"";
  88. }
  89. publicvoidstopLogs(){
  90. mRunning=false;
  91. }
  92. @Override
  93. publicvoidrun(){
  94. try{
  95. logcatProc=Runtime.getRuntime().exec(cmds);
  96. mReader=newBufferedReader(newInputStreamReader(
  97. logcatProc.getInputStream()),1024);
  98. Stringline=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(IOExceptione){
  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(IOExceptione){
  123. e.printStackTrace();
  124. }
  125. }
  126. if(out!=null){
  127. try{
  128. out.close();
  129. }catch(IOExceptione){
  130. e.printStackTrace();
  131. }
  132. out=null;
  133. }
  134. }
  135. }
  136. }
  137. }


记得加上权限:

  1. <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  2. <uses-permissionandroid:name="android.permission.READ_LOGS"/>


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

  1. packagecom.way.util;
  2. importjava.text.SimpleDateFormat;
  3. importjava.util.Date;
  4. publicclassMyDate{
  5. publicstaticStringgetFileName(){
  6. SimpleDateFormatformat=newSimpleDateFormat("yyyy-MM-dd");
  7. Stringdate=format.format(newDate(System.currentTimeMillis()));
  8. returndate;//2012年10月03日23:41:31
  9. }
  10. publicstaticStringgetDateEN(){
  11. SimpleDateFormatformat1=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");
  12. Stringdate1=format1.format(newDate(System.currentTimeMillis()));
  13. returndate1;//2012-10-0323:41:31
  14. }
  15. }


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

  1. publicclassGPSApplicationextendsApplication{
  2. @Override
  3. publicvoidonCreate(){
  4. //TODOAuto-generatedmethodstub
  5. LogcatHelper.getInstance(this).start();
  6. }
  7. }

分享到:
评论

相关推荐

    Android-AndroidLog日志打印输出到文件方便查看和上传到服务器

    标题"Android-AndroidLog日志打印输出到文件方便查看和上传到服务器"所描述的,就是一种将Android应用的日志信息写入到本地文件的方法,以便后续分析或上传到远程服务器。这个方法能够帮助开发者在无法直接访问设备...

    用LogWriter将Android应用程序的日志信息写入文件

    `LogWriter`是一个自定义工具,用于将Android应用的日志信息写入本地文件,而不是仅仅依赖于系统的`Logcat`。这使得开发者能够更方便地保存、查看和分析日志数据,尤其是在设备无法连接到电脑或需要离线分析的情况下...

    crashlog:Android 应用程序崩溃日志保存到文件

    当 crashlog 将 libcrashlog.so 动态加载到应用程序中时,它会在应用程序指定的目录中创建一个崩溃日志文件。 ##edit $vi local.properties sdk.dir=&lt;your&gt;ndk.dir=&lt;your&gt;NDKBUILD=ndk-build (linux, mac) or ndk-...

    android打印log工具

    4. **日志保存和导出**:能够将LOG保存到本地文件,或者一键导出为文本或CSV格式,方便后续分析和分享。 5. **性能优化**:部分工具通过减少不必要的LOG输出,提高应用运行效率。 提到具体的LOG工具,例如我们...

    android保存log到SD卡中

    本篇将详细讲解如何在Android中实现将log保存至SD卡的功能。 首先,了解Android的权限管理。由于Android 6.0(API级别23)及以上版本引入了运行时权限,保存文件到SD卡需要申请`WRITE_EXTERNAL_STORAGE`权限。在...

    Log4Android2PCv2.3.7

    - 在设备上安装Log4Android应用,并在PC端安装Log4Android2PC软件。 - 启动Log4Android2PC,连接到设备并开始实时同步日志。 - 根据需要调整日志过滤器,进行日志查看、搜索和分析。 5. **最佳实践** - 在开发...

    Android错误日志保存并上传服务器

    Android提供了`Log`类,它包含了一系列静态方法,如`Log.d()`, `Log.e()`, `Log.w()`等,用于输出不同级别的日志信息。开发者可以使用这些方法在代码中插入调试信息,以便在运行时查看。 在Android Studio项目中,...

    Android 安卓管理日志,所有输出日志保存本地

    便于开发,测试,定位问题。方便查看日志。所有日志保存本地文件,可按日志等级保存,定期删除,文件最长可保存自定义天数,代码中写的3天时间,天 日志文件将会删除。

    Android将应用调试log信息保存在SD卡的方法

    总结起来,Android应用调试log信息保存在SD卡的过程主要包括以下几个步骤: 1. 初始化保存路径,判断是否使用SD卡。 2. 创建`LogcatHelper`单例,启动`LogDumper`线程。 3. `LogDumper`线程执行`logcat`命令,读取...

    android保存log到本地的工具类

    在Android开发中,日志(Log)是调试和分析应用行为的重要工具。它可以帮助开发者追踪程序运行过程中的问题,理解代码执行流程。本篇将详细讲解一个简单的Android工具类,用于打印并保存日志到本地。 一、Android...

    shell 脚本抓取android logcat和kernel log,以及删除旧的log

    `logcat`是Android系统提供的一个命令行工具,用于查看和过滤Android应用及系统的日志。在shell脚本中,我们可以使用以下命令来抓取logcat: ```bash logcat -v time -b all -d &gt; logcat.log ``` 这条命令的意义是...

    Android-AndroidLog工具

    7. **日志保存**:可能支持将日志保存到本地文件,便于后期分析或者发送到服务器。 8. **异步日志**:在处理大量日志时,避免阻塞主线程,可能使用了异步方式写入日志。 9. **标签管理**:允许为不同的模块或类...

    android 保存创建Txt文件 代码程序

    这个场景中,我们关注的重点是如何在Android应用中创建并保存一个TXT文件。以下是实现这一功能的关键知识点: 1. **权限申请**: 在Android 6.0(API级别23)及以上版本,应用需要在运行时请求`WRITE_EXTERNAL_...

    Android中把LOG信息输出到sd卡的demo

    本文将详细介绍如何在Android应用中实现这一功能,以"Android中把LOG信息输出到sd卡的demo"为例。 首先,我们需要创建一个自定义的应用上下文`Application`子类。`Application`类在应用程序启动时初始化,可以作为...

    Android日志保存文件

    本文将深入探讨如何在Android中实现日志文件的保存,特别是在如何按日期进行分类管理方面。 Android系统提供了`Log`类,用于输出不同级别的日志,如`VERBOSE`、`DEBUG`、`INFO`、`WARN`、`ERROR`和`ASSERT`。这些...

    log4j 2.2、2.1等在android上的应用

    在Android应用程序开发中,日志系统扮演着至关重要的角色。它允许开发者记录程序运行过程中的信息,帮助调试、优化代码,并且在出现问题时提供故障排查的关键线索。Log4j是Java世界中广泛使用的日志框架,它的版本...

    Android-将logcat日志存储到文件中日志量较大的情况下方便查看

    为了确保不丢失任何日志,可以编写一个Android应用,使用Java的`ProcessBuilder`类或者`Runtime.getRuntime().exec()`方法来执行上述命令,并实时将日志保存到本地文件。例如,创建一个名为`LogRecordHelper`的类,...

    AndroidLogCollector Java崩溃日志收集.zip_AndroidLog 崩溃_android_log col

    AndroidLogCollector的主要功能是捕获Java层的运行时异常,并将这些异常信息整理成易于分析的日志文件。这些日志包括但不限于堆栈跟踪、系统日志(LogCat)以及其他可能与崩溃有关的数据。通过集成此工具,开发者...

    Android log4j使用Demo

    在Android应用启动时,我们需要加载配置文件并初始化log4j。这可以通过创建一个`BroadcastReceiver`并在`onReceive`方法中完成: ```java public class Log4jInitializer extends BroadcastReceiver { @...

    android 异常捕捉和日志文件保存

    在Android开发中,异常捕捉和日志文件保存是至关重要的技术环节,它们有助于开发者调试应用、定位问题以及优化用户体验。本文将深入探讨Android系统中的异常处理机制和日志记录功能,以及如何有效地保存日志文件。 ...

Global site tag (gtag.js) - Google Analytics