Imprimiendo las últimas 200 líneas desde Logcat

Estoy tratando de imprimir las últimas 200 líneas de Android Logcat en mi aplicación. Hasta ahora he podido obtener Logcat en un BufferedReader usando InputStreamReader. El problema es que no sé cómo saltar al final del Lector almacenado en búfer y luego leer hacia atrás, o saltar justo por encima de las últimas 200 líneas e imprimir desde allí. No quiero hacer el método de fuerza bruta donde leo todo el registro. Espero que haya una solución más elegante.

Gracias.

preguntado el 27 de julio de 12 a las 17:07

¿Podría convertir el contenido de BufferedReader en algo como ArrayList, luego saltar a ArrayList.length() - 200 e imprimir los elementos desde ese punto hasta ArrayList.length() en un bucle? -

Podría, pero eso implicaría revisar todo el búfer y colocar cada línea en el Array:

"No quiero hacer el método de fuerza bruta donde leo todo el registro". .. Debería haber considerado eso primero, mis disculpas. -

Aparece de la respuesta aceptada en esta pregunta que es posible que no pueda hacer esto con un BufferedReader. ¿Hay alguna otra forma de almacenar el LogCat? -

LogCat solo se puede leer mediante un inputStream. -

2 Respuestas

Un BufferedReader no conoce el concepto de una línea, solo un flujo de datos. Tendrá dificultades para encontrar una manera de saltar a (EOF - 200 líneas) si no sabe cuánto tiempo es una línea.

Recomendaría rellenar un RingBuffer después, almacenando 200 líneas con las más nuevas reemplazando a las más antiguas. De esa manera, el BufferedReader sigue llenando el ringBuffer y lo usa para leer.

otra alternativa sería borrar el registro cada 200 líneas...

Respondido 27 Jul 12, 18:07

Qué estructura de datos genial. Nunca había oído hablar de esto antes y es perfecto para esto exactamente. Buena idea. - Shadoninja

Así que esta no es la solución que estaba buscando, pero hace lo que quería. En lugar de llevar el registro a un BufferedReader y luego ordenarlo e imprimirlo. Uso etiquetas logcat para especificar el tamaño de un archivo de salida.

Runtime.getRuntime.exec("logcat -r 160 -f mylog.log")

Y luego volver a leer el archivo.

Respondido 30 Jul 12, 14:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.