相信大家在做应用调试的时候,不可能时时通过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 + ")\"";
- }