美文网首页
log日志存为文件

log日志存为文件

作者: 43d60efa37c7 | 来源:发表于2017-03-08 14:50 被阅读35次
/* 
 *log打印日志保存,文件的保存以小时为单位 
 * permission:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />   
 *            <uses-permission android:name="android.permission.READ_LOGS" />   
 */  
public class LogCatHelper {  
    private static LogCatHelper instance = null;  
    private String dirPath;//保存路径  
    private int appid;//应用pid  
    private Thread logThread;  
      
    /** 
     * @param mContext 
     * @param path log日志保存根目录 
     * @return 
     */  
    public static LogCatHelper getInstance(Context mContext,String path){  
        if(instance == null){  
            instance = new LogCatHelper(mContext,path);  
        }  
        return instance;  
    }  
      
    private LogCatHelper(Context mContext,String path) {  
        appid = android.os.Process.myPid();  
        if(TextUtils.isEmpty(path)){  
            dirPath = Environment.getExternalStorageDirectory().getAbsolutePath()  
                        +File.separator+"seeker"+File.separator+mContext.getPackageName();  
        }else{  
            dirPath = path;  
        }  
        File dir = new File(dirPath);  
        if(!dir.exists()){  
            dir.mkdirs();  
        }  
    }  
      
    /** 
     * 启动log日志保存  
     */  
    public void start(){  
        if(logThread == null){  
            logThread = new Thread(new LogRunnable(appid, dirPath));  
        }  
        logThread.start();  
    }  
      
    private static class LogRunnable implements Runnable{  
  
        private Process mProcess;  
        private FileOutputStream fos;  
        private BufferedReader mReader;  
        private String cmds;  
        private String mPid;  
          
        public LogRunnable(int pid,String dirPath) {  
            this.mPid = ""+pid;  
            try {  
                File file = new File(dirPath,FormatDate.getFormatDate()+".log");  
                if(!file.exists()){  
                    file.createNewFile();  
                }  
                fos = new FileOutputStream(file,true);  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
            cmds = "logcat *:v | grep \"(" + mPid + ")\"";  
        }  
          
        @Override  
        public void run() {  
            try {  
                mProcess = Runtime.getRuntime().exec(cmds);  
                mReader = new BufferedReader(new InputStreamReader(mProcess.getInputStream()),1024);  
                String line;  
                while((line = mReader.readLine()) != null){  
                    if(line.length() == 0){  
                        continue;  
                    }  
                    if(fos != null && line.contains(mPid)){  
                        fos.write((FormatDate.getFormatTime()+" "+line+"\r\n").getBytes());  
                    }  
                }  
            } catch (Exception e) {  
                e.printStackTrace();  
            }finally{  
                if(mProcess != null){  
                    mProcess.destroy();  
                    mProcess = null;  
                }  
                try {  
                    if(mReader != null){  
                        mReader.close();  
                        mReader = null;  
                    }  
                    if(fos != null){  
                        fos.close();  
                        fos = null;  
                    }  
                } catch (Exception e2) {  
                    e2.printStackTrace();  
                }  
            }  
        }  
    }  
      
    @SuppressLint("SimpleDateFormat")  
    private static class FormatDate{  
          
        public static String getFormatDate(){  
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHH");  
            return sdf.format(System.currentTimeMillis());  
        }  
          
        public static String getFormatTime(){  
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
            return sdf.format(System.currentTimeMillis());  
        }  
    }  
}

相关文章

网友评论

      本文标题:log日志存为文件

      本文链接:https://www.haomeiwen.com/subject/egpbgttx.html