1package com.way.util; 2 3import java.io.BufferedReader; 4import java.io.File; 5import java.io.FileNotFoundException; 6import java.io.FileOutputStream; 7import java.io.IOException; 8import java.io.InputStreamReader; 9 10import android.content.Context; 11import android.os.Environment; 12 13/** 14 * log日志统计保存 15 * 16 * @author way 17 * 18 */ 19 20public 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 public void stopLogs() { 107 mRunning = false; 108 } 109 110 @Override 111 public void run() { 112 try { 113 logcatProc = Runtime.getRuntime().exec(cmds); 114 mReader = new BufferedReader(new InputStreamReader( 115 logcatProc.getInputStream()), 1024); 116 String line = null; 117 while (mRunning && (line = mReader.readLine()) != null) { 118 if (!mRunning) { 119 break; 120 } 121 if (line.length() == 0) { 122 continue; 123 } 124 if (out != null && line.contains(mPID)) { 125 out.write((MyDate.getDateEN() + " " + line + "\n") 126 .getBytes()); 127 } 128 } 129 130 } catch (IOException e) { 131 e.printStackTrace(); 132 } finally { 133 if (logcatProc != null) { 134 logcatProc.destroy(); 135 logcatProc = null; 136 } 137 if (mReader != null) { 138 try { 139 mReader.close(); 140 mReader = null; 141 } catch (IOException e) { 142 e.printStackTrace(); 143 } 144 } 145 if (out != null) { 146 try { 147 out.close(); 148 } catch (IOException e) { 149 e.printStackTrace(); 150 } 151 out = null; 152 } 153 154 } 155 156 } 157 158 } 159 160} 161 162<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 163 <uses-permission android:name="android.permission.READ_LOGS" /> 164 165package com.way.util; 166 167import java.text.SimpleDateFormat; 168import java.util.Date; 169 170public class MyDate { 171 public static String getFileName() { 172 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 173 String date = format.format(new Date(System.currentTimeMillis())); 174 return date;// 2012年10月03日 23:41:31 175 } 176 177 public static String getDateEN() { 178 SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 179 String date1 = format1.format(new Date(System.currentTimeMillis())); 180 return date1;// 2012-10-03 23:41:31 181 } 182 183}
OK,所有事情做完之后,在我们的应用中start一下就OK了,使用完之后,记得调用一下stop:
1public class GPSApplication extends Application { 2 3 @Override 4 public void onCreate() { 5 // TODO Auto-generated method stub 6 LogcatHelper.getInstance(this).start(); 7 } 8}