studio hacer graficos como app android logging monitoring logcat continuous

android - hacer - logcat ionic



¿Cómo monitorear constantemente el archivo LogCat? (2)

Puede crear un nuevo hilo para ejecutar el logcat (sin la opción -d) en el fondo.

Nota: Use los eventos de búfer en lugar del proceso ActivityManager, es más preciso. "Logcat -b eventos"

Necesito monitorear de alguna manera el registro de LogCat, lo que significa que mientras mi servicio se está ejecutando necesito leer el LogCat para nuevas entradas. En este momento solo sé cómo recuperar una vez el Log:

Process mLogcatProc = null; BufferedReader reader = null; try { mLogcatProc = Runtime.getRuntime().exec(new String[] {"logcat", "-d", "ActivityManager:I *:S" }); reader = new BufferedReader(new InputStreamReader (mLogcatProc.getInputStream())); String line; final StringBuilder log = new StringBuilder(); String separator = System.getProperty("line.separator"); while ((line = reader.readLine()) != null) { log.append(line); log.append(separator); }

Si elimino la opción -d, no saldrá, pero tampoco funcionará. Entonces, ¿cómo puedo modificar el código de abajo para leer continuamente nuevas entradas de LogCat?


Así es como lo hice, usando la sugerencia de Jiahao Liu:

ReadThread thread; public void startRecordingLogs() { if(thread == null || !thread.isAlive()) { ReadThread thread = new ReadThread(); thread.start(); } } public String stopRecordingLogs() { String results = thread.stopLogging(); return results; } private class ReadThread extends Thread{ String results; Process process; Object lockObject = new Object(); public void run(){ synchronized(lockObject) { process = Runtime.getRuntime().exec("logcat -v time"); reader = new BufferedReader(new InputStreamReader (process.getInputStream())); String line; final StringBuilder log = new StringBuilder(); String separator = System.getProperty("line.separator"); while ((line = reader.readLine()) != null) { log.append(line); log.append(separator); } } results = log.toString(); } public String stopLogging() { process.destroy(); synchronized(lockObject) { return results; } } }