android 线程方式打印log到sd卡

原创
2013/12/01 10:57
阅读数 288

package com.foundreams.profs_chinese.payutil;
import java.text.SimpleDateFormat;
import java.util.Date;

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.widget.EditText;

/**

  • log日志统计保存
  • @author way

*/

public class Loger {

private static Loger 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 + "LOG";  
    } else {// 如果SD卡不存在,就保存到本应用的目录下   
        PATH_LOGCAT = context.getFilesDir().getAbsolutePath()  
                + File.separator + "LOG";  
    }  
    File file = new File(PATH_LOGCAT);  
    if (!file.exists()) {  
        file.mkdirs();  
    }  
}  

public static Loger getInstance(Context context) {  
    if (INSTANCE == null) {  
        INSTANCE = new Loger(context);  
    }  
    return INSTANCE;  
}  

private Loger(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  | 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());  

// out.flush(); }
}

        } 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.flush();
                    out.close();  
                } catch (IOException e) {  
                    e.printStackTrace();  
                }  
                out = null;  
            }  

        }  

    }  

}  

public static 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   
}  

}
}

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
2 收藏
0
分享
返回顶部
顶部