zoukankan      html  css  js  c++  java
  • Android将应用调试log信息保存在SD卡

    转载:http://blog.csdn.net/way_ping_li/article/details/8487866

    把自己应用的调试信息写入到SD卡中。

    package com.sdmc.hotel.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;  
    import android.util.Log;
      
    /** 
     * log日志统计保存 
     * 会打印i,e,w,不会打印d
     * 每次开启应用,就会把上次的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);  
            }
            Log.i("path", PATH_LOGCAT);///storage/sdcard0/miniGPS
            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 + ")"";//会打印i,e,w,不会打印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((MyDate.getDateEN() + "  " + line + "
    ")  
                                    .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;  
                    }  
      
                }  
      
            }  
      
        }  
      
    }  

    系统权限

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
    <uses-permission android:name="android.permission.READ_LOGS" /> 

    时间工具类:

    package com.sdmc.hotel.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  
      }  
    
    } 

    方法的调用:

    public class MyApplication extends Application {  
      
        @Override  
        public void onCreate() {  
          
            LogcatHelper.getInstance(this).start();  
        }  
    }

    pspspspspsp

  • 相关阅读:
    java面向对象高级分层实例_实体类
    But what exactly do we mean by "gets closer to"?
    information entropy as a measure of the uncertainty in a message while essentially inventing the field of information theory
    SVM vs. Softmax
    every row of W is a classifier for one of the classes
    Hinge Loss
    polynomial time
    Conditional random fields
    Frobenius Norm
    L2 范数 L1 范数 出租车范数
  • 原文地址:https://www.cnblogs.com/lipeineng/p/5434078.html
Copyright © 2011-2022 走看看