Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android將應用log信息保存文件

Android將應用log信息保存文件

編輯:關於Android編程

   相信大家在做應用調試的時候,不可能時時通過USB線連著電腦去查看log信息,所以,將應用的log信息保存到手機本地就很有必要了,有助我們從這些log信息中提取有用的部分,以解決一些bug,下面我把網上分享的代碼中作了一些精簡,作為開發者使用,個人覺得沒必要通過用戶上傳給我們,用戶上傳的不需要這麼龐大的log信息,僅僅那部分崩潰的log信息即可,可參考我的另外一篇blog:http://blog.csdn.net/weidi1989/article/details/7927273。      好了,廢話不多說,直接分享封裝好的log信息類:LogcatHelper package com.way.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;      /**   * 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);           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 + ")\"";              }              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.way.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       }      }     OK,所有事情做完之後,在我們的應用中start一下就OK了,使用完之後,記得調用一下stop: public class GPSApplication extends Application {          @Override       public void onCreate() {           // TODO Auto-generated method stub           LogcatHelper.getInstance(this).start();       }   }    
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved