你的位置:首页 > 操作系统

[操作系统]Android将应用调试log信息保存在SD卡


转载:http://blog.csdn.net/way_ping_li/article/details/8487866

 

把自己应用的调试信息写入到SD卡中。

package com.sdmc.hotel.util;import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader;  import android.content.Context; import android.os.Environment; import android.util.Log; /** * log日志统计保存 * 会打印i,e,w,不会打印d * 每次开启应用,就会把上次的log信息覆盖  * @author way *  */  public class LogcatHelper {    private static LogcatHelper INSTANCE = null;   private static String PATH_LOGCAT;   private LogDumper mLogDumper = null;   private int mPId;    /**   *    * 初始化目录   *    * */   public void init(Context context) {     if (Environment.getExternalStorageState().equals(         Environment.MEDIA_MOUNTED)) {// 优先保存到SD卡中       PATH_LOGCAT = Environment.getExternalStorageDirectory()           .getAbsolutePath() + File.separator + "miniGPS";     } else {// 如果SD卡不存在,就保存到本应用的目录下       PATH_LOGCAT = context.getFilesDir().getAbsolutePath()           + File.separator + "miniGPS";     }     File file = new File(PATH_LOGCAT);     if (!file.exists()) {       file.mkdirs();     }   }    public static LogcatHelper getInstance(Context context) {     if (INSTANCE == null) {       INSTANCE = new LogcatHelper(context);     }     return INSTANCE;   }    private LogcatHelper(Context context) {     init(context);     mPId = android.os.Process.myPid();   }    public void start() {     if (mLogDumper == null){       mLogDumper = new LogDumper(String.valueOf(mPId), PATH_LOGCAT);     }    Log.i("path", PATH_LOGCAT);///storage/sdcard0/miniGPS    mLogDumper.start();   }    public void stop() {     if (mLogDumper != null) {       mLogDumper.stopLogs();       mLogDumper = null;     }   }    private class LogDumper extends Thread {      private Process logcatProc;     private BufferedReader mReader = null;     private boolean mRunning = true;     String cmds = null;     private String mPID;     private FileOutputStream out = null;      public LogDumper(String pid, String dir) {       mPID = pid;       try {         out = new FileOutputStream(new File(dir, "GPS-"             + MyDate.getFileName() + ".log"));       } catch (FileNotFoundException e) {         // TODO Auto-generated catch block         e.printStackTrace();       }        /**       *        * 日志等级:*:v , *:d , *:w , *:e , *:f , *:s       *        * 显示当前mPID程序的 E和W等级的日志.       *        * */        // cmds = "logcat *:e *:w | grep \"(" + mPID + ")\"";       // cmds = "logcat | grep \"(" + mPID + ")\"";//打印所有日志信息       // cmds = "logcat -s way";//打印标签过滤信息       cmds = "logcat *:e *:i | grep \"(" + mPID + ")\"";//会打印i,e,w,不会打印d       }      public void stopLogs() {       mRunning = false;     }      @Override     public void run() {       try {         logcatProc = Runtime.getRuntime().exec(cmds);         mReader = new BufferedReader(new InputStreamReader(             logcatProc.getInputStream()), 1024);         String line = null;         while (mRunning && (line = mReader.readLine()) != null) {           if (!mRunning) {             break;           }           if (line.length() == 0) {             continue;           }           if (out != null && line.contains(mPID)) {             out.write((MyDate.getDateEN() + " " + line + "\n")                 .getBytes());           }         }        } catch (IOException e) {         e.printStackTrace();       } finally {         if (logcatProc != null) {           logcatProc.destroy();           logcatProc = null;         }         if (mReader != null) {           try {             mReader.close();             mReader = null;           } catch (IOException e) {             e.printStackTrace();           }         }         if (out != null) {           try {             out.close();           } catch (IOException e) {             e.printStackTrace();           }           out = null;         }        }      }    }  } 

 

 

系统权限

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

 

 

时间工具类:

package com.sdmc.hotel.util;import java.text.SimpleDateFormat; import java.util.Date; public class MyDate {  public static String getFileName() {    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");    String date = format.format(new Date(System.currentTimeMillis()));    return date;// 2012年10月03日 23:41:31  }  public static String getDateEN() {    SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    String date1 = format1.format(new Date(System.currentTimeMillis()));    return date1;// 2012-10-03 23:41:31  } } 

 

 

方法的调用:

public class MyApplication extends Application {    @Override   public void onCreate() {        LogcatHelper.getInstance(this).start();   } 
}

 

 

pspspspspsp