Quero ler e reagir aos logs do logcat em meu aplicativo.
Encontrei o seguinte código:
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) {}
Este código realmente retorna os logs do logcat feitos até que o aplicativo fosse iniciado -
Mas é possível ouvir continuamente até mesmo novos logs do logcat?
android
logcat
android-logcat
David
fonte
fonte
Respostas:
Você pode continuar lendo os logs, apenas removendo o sinalizador "-d" em seu código acima.
O sinalizador "-d" instrui o logcat para mostrar o conteúdo do log e sair. Se você remover o sinalizador, o logcat não será encerrado e continuará enviando qualquer nova linha adicionada a ele.
Apenas tenha em mente que isso pode bloquear seu aplicativo se não for projetado corretamente.
boa sorte.
fonte
Você pode limpar seu logcat com este método que estou usando para limpar depois de gravar o logcat em um arquivo para evitar linhas duplicadas:
fonte
Com co-rotinas e as bibliotecas oficiais lifecycle-livesata-ktx e lifecycle-viewmodel-ktx , é simples assim:
Uso
fonte
WebView
vez deTextView
.Aqui está um rápido conjunto / drop-in que pode ser usado para capturar todos os itens de log atuais ou novos (desde a última solicitação).
Você deve modificar / estender isso, porque você pode querer retornar um fluxo contínuo em vez de um LogCapture.
O Android LogCat "Manual": https://developer.android.com/studio/command-line/logcat.html
Em seu projeto que realiza o registro de atividades:
Quando você quiser capturar tudo que você logou através do "Logger"
Quando você fica com fome e quer comer mais lenha
Você pode obter a captura como uma string com
Ou você pode obter os itens de registro da captura com
Não existe um método estático exato para capturar as chaves de log estrangeiras, mas há uma maneira, no entanto
Usar o acima também permitirá que você chame
Logger.this.nextCapture
a captura estrangeira.fonte
git.hsusa.core.log.controller.AndroidLogController.java
; Você pode querer usar minha biblioteca hscore em vez desta solução "rápida e suja". Para fazer o registro com hscore você usaria:public final static SmartLogContext log = SmartLog.getContextFor("MyLogContext");
para começar. Funciona da mesma forma com uma API melhor. Você pode usar meu rastreador de problemas do hub git se precisar de ALGUMA ajuda com isso.O sinalizador "-c" limpa o buffer.
-c Limpa (limpa) todo o log e sai.
fonte
Estou usando isso no meu aplicativo e funciona. E você pode usar o código acima em Timer Task para que não pare o seu thread principal
fonte