欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android logcat信息记录到手机文件的方法

程序员文章站 2024-01-25 19:22:35
这里介绍两种方法:目前使用 方法一 方法一: 添加权限: 示例代码: public class MyApp extends Application {...

这里介绍两种方法:目前使用 方法一

方法一:

添加权限:

示例代码:

    public class MyApp extends Application {  
      
        private Process mLogProcess;  
      
        @Override  
        public void onCreate() {  
            super.onCreate();  
            try {  
                int pid = android.os.Process.myPid();  
                Log.d("MyApp", "PID is " + pid);  
                Calendar calendar = Calendar.getInstance();  
                String filename = String.format("/sdcard/MyApp_Log_%04d%02d%02d_%02d%02d%02d.txt",  
                        calendar.get(Calendar.YEAR),  
                        calendar.get(Calendar.MONTH),  
                        calendar.get(Calendar.DAY_OF_MONTH),  
                        calendar.get(Calendar.HOUR_OF_DAY),  
                        calendar.get(Calendar.MINUTE),  
                        calendar.get(Calendar.SECOND));  
                mLogProcess = Runtime.getRuntime().exec(String.format("logcat -v time -f %s", filename));  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
      
        @Override  
        public void onTerminate() {  
            super.onTerminate();  
      
            if(mLogProcess != null ){  
                mLogProcess.destroy();  
            }  
        }  
    }  

方法二:

添加权限 同上;

示例代码:

    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 + ")\"";  
      
            }  
      
            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((MyDate.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;  
                    }  
      
                }  
      
            }  
      
        }  
      
    }  

时间工具类:

    package com.way.util;  
      
    import java.text.SimpleDateFormat;  
    import java.util.Date;  
      
    public class MyDate {  
        public static String getFileName() {  
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");  
            String date = format.format(new Date(System.currentTimeMillis()));  
            return date;// 2012年10月03日 23:41:31  
        }  
      
        public static String getDateEN() {  
            SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
            String date1 = format1.format(new Date(System.currentTimeMillis()));  
            return date1;// 2012-10-03 23:41:31  
        }  
      
    }  

OK,所有事情做完之后,在我们的应用中start一下就OK了,使用完之后,记得调用一下stop:

    public class GPSApplication extends Application {  
      
        @Override  
        public void onCreate() {  
            // TODO Auto-generated method stub  
            LogcatHelper.getInstance(this).start();  
        }  
    }