Chcę czytać dzienniki logcat w mojej aplikacji i reagować na nie.
Znalazłem następujący kod:
try {
Process process = Runtime.getRuntime().exec("logcat -d");
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
StringBuilder log=new StringBuilder();
String line = "";
while ((line = bufferedReader.readLine()) != null) {
log.append(line);
}
TextView tv = (TextView)findViewById(R.id.textView1);
tv.setText(log.toString());
}
catch (IOException e) {}
Ten kod rzeczywiście zwraca dzienniki logcat, które powstały do momentu uruchomienia aplikacji -
Ale czy możliwe jest ciągłe słuchanie nawet nowych dzienników logcat?
android
logcat
android-logcat
David
źródło
źródło
Odpowiedzi:
Możesz dalej czytać dzienniki, usuwając flagę „-d” w powyższym kodzie.
Flaga „-d” nakazuje logcatowi wyświetlenie zawartości dziennika i wyjście. Jeśli usuniesz flagę, logcat nie zakończy działania i będzie wysyłać każdą dodaną do niego nową linię.
Pamiętaj tylko, że może to zablokować twoją aplikację, jeśli nie zostanie poprawnie zaprojektowana.
powodzenia.
źródło
Możesz wyczyścić swój logcat za pomocą tej metody, której używam do czyszczenia po zapisaniu logcata do pliku, aby uniknąć zduplikowanych wierszy:
źródło
Z coroutines i oficjalnymi bibliotekami lifecycle-livesata-ktx i lifecycle -viewmodel-ktx jest to proste:
Stosowanie
źródło
WebView
zamiastTextView
.Oto szybkie zestawianie / upuszczanie, które można wykorzystać do przechwycenia wszystkich bieżących lub wszystkich nowych (od ostatniego żądania) elementów dziennika.
Powinieneś to zmodyfikować / rozszerzyć, ponieważ możesz chcieć zwrócić ciągły strumień zamiast LogCapture.
„Instrukcja” Android LogCat: https://developer.android.com/studio/command-line/logcat.html
W Twoim projekcie, który rejestruje aktywność:
Gdy chcesz uchwycić wszystko, co zalogowałeś się przez „Logger”
Kiedy zgłodniejesz i chcesz zjeść więcej kłód
Możesz uzyskać przechwytywanie jako ciąg z
Możesz też pobrać pozycje dziennika przechwytywania za pomocą
Nie ma dokładnej statycznej metody przechwytywania kluczy dzienników obcych, ale jest na to sposób
Skorzystanie z powyższego pozwoli ci również wezwać
Logger.this.nextCapture
zagraniczne przechwytywanie.źródło
git.hsusa.core.log.controller.AndroidLogController.java
; Możesz użyć mojej biblioteki hscore zamiast tego "szybkiego i brudnego" rozwiązania. Aby zarejestrować się za pomocą hscore, użyłbyś:public final static SmartLogContext log = SmartLog.getContextFor("MyLogContext");
aby rozpocząć. Działa prawie tak samo z lepszym interfejsem API. Możesz skorzystać z mojego narzędzia do śledzenia problemów w git hub, jeśli potrzebujesz JAKIEJKOLWIEK pomocy.Flaga „-c” czyści bufor.
-c Czyści (opróżnia) cały dziennik i wychodzi.
źródło
Używam tego w mojej aplikacji i działa. I możesz użyć powyższego kodu w zadaniu timera, aby nie zatrzymywał twojego głównego wątku
źródło