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; | |||
|  |                 } | |||
|  | 
 | |||
|  |             } | |||
|  | 
 | |||
|  |         } | |||
|  | 
 | |||
|  |     } | |||
|  | 
 | |||
|  | } |