package com.lh.fly.common.assist; import com.lh.fly.common.log.Log; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.Date; /** * 打印日志 * * @author mty * @time 2011-11-2下午06:23:29 */ public class LogReader extends Thread { public static final String TAG = "LogReader"; public static final String LOG_FILE_PATH = "/bonglog.txt"; public static final String LOG_ROOT_PATH = "/sdcard"; public static boolean open = true; private static LogReader instance = null; private static Process mLogcatProc = null; private BufferedReader mReader = null; private String packageName = "*"; public static void startCatchLog(String packageName) { if (!open) return; if (instance == null) { instance = new LogReader(); instance.packageName = packageName; instance.start(); } } public static void stopCatchLog() { if (!open) return; if (mLogcatProc != null) { mLogcatProc.destroy(); mLogcatProc = null; } } @Override public void run() { Log.i(TAG, "log reader(catcher) is running..---------------------------"); BufferedWriter bw = null; try { mLogcatProc = Runtime.getRuntime().exec("logcat " + packageName + ":I"); mReader = new BufferedReader(new InputStreamReader(mLogcatProc.getInputStream())); // 打印系统信息。 logSystemInfo(); String line; File file = new File(LOG_ROOT_PATH + LOG_FILE_PATH); if (file.exists() && isFileSizeOutof10M(file)) { file.delete(); } if (file.exists()) { System.out.println("log file size is :" + FormatFileSize(file.length())); } FileWriter fw = new FileWriter(file, true); bw = new BufferedWriter(fw); while ((line = mReader.readLine()) != null) { bw.append(line); bw.newLine(); bw.flush(); } } catch (Exception e) { e.printStackTrace(); } finally { Log.i(TAG, "Log reader(catcher) and bufferwriter has closed. ------------------"); try { if (mReader != null) { mReader.close(); mReader = null; } if (bw != null) { bw.close(); } } catch (IOException e) { e.printStackTrace(); } instance = null; } } public static String FormatFileSize(long fileS) {// 转换文件大小 DecimalFormat df = new DecimalFormat("#.00"); String fileSizeString = ""; if (fileS < 1024) { fileSizeString = df.format((double) fileS) + "B"; } else if (fileS < 1048576) { fileSizeString = df.format((double) fileS / 1024) + "K"; } else if (fileS < 1073741824) { fileSizeString = df.format((double) fileS / 1048576) + "M"; } else { fileSizeString = df.format((double) fileS / 1073741824) + "G"; } return fileSizeString; } /** * 判断文件是否大于10M。 * * @param file * @return * @throws Exception */ public static boolean isFileSizeOutof10M(File file) throws Exception { if (file == null) return false; return file.length() >= 10485760; } public static void logSystemInfo() { Date date = new Date(System.currentTimeMillis()); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String time = dateFormat.format(date); android.util.Log.w("system", "New Start $$$$$$$$$$$$$$########### " + time + "############$$$$$$$$$$$$$$$"); android.util.Log.w("system", "android.os.Build.BOARD:" + android.os.Build.BOARD); android.util.Log.w("system", "android.os.Build.DEVICE:" + android.os.Build.DEVICE); android.util.Log.w("system", "android.os.Build.MANUFACTURER:" + android.os.Build.MANUFACTURER); android.util.Log.w("system", "android.os.Build.MODEL:" + android.os.Build.MODEL); android.util.Log.w("system", "android.os.Build.PRODUCT:" + android.os.Build.PRODUCT); android.util.Log.w("system", "android.os.Build.VERSION.CODENAME:" + android.os.Build.VERSION.CODENAME); android.util.Log.w("system", "android.os.Build.VERSION.RELEASE:" + android.os.Build.VERSION.RELEASE); //android.util.Log.w("system", "android.os.Build.VERSION.SDK:" // + android.os.Build.VERSION.SDK); } }