对log进行封装
public class LogCatHelper {
public static final String TAG = "HqVideoPlayer";
private static LogCatHelper instance = null;
private String dirPath;//保存路径
private int appid;//应用pid
private Thread logThread;
/**
* @param mContext
* @return
*/
public static LogCatHelper getInstance(Context mContext) {
if (instance == null) {
instance = new LogCatHelper(mContext, "mnt/sdcard");
}
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();
Log.d(TAG, "=====> path = " + dirPath);
} 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 = Integer.toString(pid);
try {
File file = new File(dirPath, FormatDate.getFormatDate() + "_video.log");
if (!file.exists()) {
file.createNewFile();
}
fos = new FileOutputStream(file, true);
} catch (Exception e) {
Log.d(TAG, "error : " + e);
}
/** * * 日志等级:*: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 *:I | grep -v \"(" + 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) {
Log.d(TAG, "error : " + e);
} 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) {
Log.d(TAG, "error : " + e2);
}
}
}
}
@SuppressLint("SimpleDateFormat")
public static class FormatDate {
public static String getFormatDate() {
SimpleDateFormat sdf = new SimpleDateFormat("MMdd");
return sdf.format(System.currentTimeMillis());
}
public static String getFormatTime() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(System.currentTimeMillis());
}
}
}