161 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			161 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| package com.novelbook.android.utils;
 | ||
| 
 | ||
| 
 | ||
| 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 + "novelLog";
 | ||
|         } else {// 如果SD卡不存在,就保存到本应用的目录下
 | ||
|             PATH_LOGCAT = context.getFilesDir().getAbsolutePath()
 | ||
|                     + File.separator + "novelLog";
 | ||
|         }
 | ||
|         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, "Novel-"
 | ||
|                         + CommonUtil.getFileName() + ".log"),true);
 | ||
|             } 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 + ")\"";
 | ||
|             cmds = "logcat *:D | grep \"(" + mPID + ")\"";
 | ||
|            // cmds = "logcat *: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((CommonUtil.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;
 | ||
|                 }
 | ||
| 
 | ||
|             }
 | ||
| 
 | ||
|         }
 | ||
| 
 | ||
|     }
 | ||
| 
 | ||
| } |