现在的位置: 首页 > 综合 > 正文

Android将应用log信息保存文件

2014年01月17日 ⁄ 综合 ⁄ 共 3209字 ⁄ 字号 评论关闭

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

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

[java] view
plain
copy

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

抱歉!评论已关闭.