package com.lfk.justweengine.utils.showLogger;
import android.os.Handler;
import android.os.Message;
import android.os.Parcel;
import android.os.Parcelable;
import com.lfk.justweengine.utils.logger.LogCat;
import com.lfk.justweengine.utils.logger.LogLevel;
import com.lfk.justweengine.utils.logger.Options;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* LogPrintHandler
* <p>
* Created by liufengkai on 16/4/15.
*/
public class LogHandler {
private static LogHandler mInstance = null;
private static int darningTime = 3;
public static final int LOGCAT = 100;
private static Handler sentHandler;
private ScheduledExecutorService service;
public class Line implements Parcelable {
String line;
String lev;
String time;
String tag;
public Line() {
}
protected Line(Parcel in) {
line = in.readString();
lev = in.readString();
time = in.readString();
tag = in.readString();
}
public final Creator<Line> CREATOR = new Creator<Line>() {
@Override
public Line createFromParcel(Parcel in) {
return new Line(in);
}
@Override
public Line[] newArray(int size) {
return new Line[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(line);
dest.writeString(lev);
dest.writeString(time);
dest.writeString(tag);
}
}
public static LogHandler getInstance() {
if (mInstance == null) {
synchronized (LogHandler.class) {
if (mInstance == null)
mInstance = new LogHandler();
}
}
return mInstance;
}
private class GetLogger implements Runnable {
@Override
public void run() {
getLogger();
}
}
private void getLogger() {
Process process = LogCat.getInstance()
.options(Options.DUMP)
.withTime()
.recentLines(1000)
.filter("", LogLevel.VERBOSE)
.commit();
BufferedReader bufferedReader = null;
try {
bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = bufferedReader.readLine()) != null) {
if (sentHandler != null) {
Message msg = sentHandler.obtainMessage();
msg.obj = getLine(line);
msg.what = LOGCAT;
sentHandler.sendMessage(msg);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private Line getLine(String line) {
Line log = new Line();
int tagStart = line.indexOf("/");
int msgStart = line.indexOf("):");
if (msgStart == -1 || tagStart == -1) {
return null;
}
log.tag = line.substring(tagStart + 1, msgStart + 1);
log.line = line.substring(msgStart + 2);
log.lev = line.substring(tagStart - 1, tagStart);
log.time = line.substring(0, tagStart - 2);
return log;
}
public LogHandler() {
service = Executors.newSingleThreadScheduledExecutor();
service.scheduleAtFixedRate(new GetLogger(), 0, darningTime, TimeUnit.SECONDS);
}
public static void init(Handler handler, int time) {
sentHandler = handler;
darningTime = time;
}
}