161 lines
4.6 KiB
Plaintext
161 lines
4.6 KiB
Plaintext
package com.novelbook.android.utils;
|
||
|
||
|
||
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 + "novelLog";
|
||
} else {// 如果SD卡不存在,就保存到本应用的目录下
|
||
PATH_LOGCAT = context.getFilesDir().getAbsolutePath()
|
||
+ File.separator + "novelLog";
|
||
}
|
||
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, "Novel-"
|
||
+ CommonUtil.getFileName() + ".log"),true);
|
||
} 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 + ")\"";
|
||
cmds = "logcat *:D | grep \"(" + mPID + ")\"";
|
||
// cmds = "logcat *: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((CommonUtil.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;
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
|
||
} |