Respostas:
O Logcollector é uma boa opção, mas você precisa instalá-lo primeiro.
Quando quero que o arquivo de log seja enviado por correio, geralmente faço o seguinte:
adb shell logcat > log.txtadb. Geralmente emC:\Users\[your username]\AppData\Local\Android\Sdk\platform-tools\
Espero que esse código ajude alguém. Levei 2 dias para descobrir como fazer logon no dispositivo e depois filtrá-lo:
public File extractLogToFileAndWeb(){
//set a file
Date datum = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.ITALY);
String fullName = df.format(datum)+"appLog.log";
File file = new File (Environment.getExternalStorageDirectory(), fullName);
//clears a file
if(file.exists()){
file.delete();
}
//write log to file
int pid = android.os.Process.myPid();
try {
String command = String.format("logcat -d -v threadtime *:*");
Process process = Runtime.getRuntime().exec(command);
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
StringBuilder result = new StringBuilder();
String currentLine = null;
while ((currentLine = reader.readLine()) != null) {
if (currentLine != null && currentLine.contains(String.valueOf(pid))) {
result.append(currentLine);
result.append("\n");
}
}
FileWriter out = new FileWriter(file);
out.write(result.toString());
out.close();
//Runtime.getRuntime().exec("logcat -d -v time -f "+file.getAbsolutePath());
} catch (IOException e) {
Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
}
//clear the log
try {
Runtime.getRuntime().exec("logcat -c");
} catch (IOException e) {
Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
}
return file;
}
como apontado por @mehdok
adicione a permissão ao manifesto para ler logs
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.READ_LOGS" />
Eu usaria algo desse tipo:
$adb logcat -d > logcat.txt
A opção -d despeja todo o buffer circular no arquivo de texto e, se você estiver procurando por uma ação / intenção específica, tente
$adb logcat -d | grep 'com.whatever.you.are.looking.for' -B 100 -A 100 > shorterlog.txt
Espero que isto ajude :)
Para aqueles que não estão interessados em depurar ou usar USB, adbexiste uma solução mais fácil. No Android 6 (não tenho certeza da versão anterior), há uma opção nas ferramentas do desenvolvedor: Relatório de erros
Clicar nesta opção preparará um relatório de erro e solicitará que você o salve na unidade ou envie-o por email.
Eu achei que essa era a maneira mais fácil de obter logs. Não gosto de ativar a depuração USB.
EDITAR:
O log interno é um buffer circular na memória. Na verdade, existem alguns desses buffers circulares para cada um: rádio, eventos, principal. O padrão é principal.
Para obter uma cópia de um buffer, uma técnica envolve executar um comando no dispositivo e obter a saída como uma variável de sequência.
O SendLog é um aplicativo de código aberto que faz exatamente isso: http://www.l6n.org/android/sendlog.shtml
A chave é executar logcatno dispositivo no sistema operacional incorporado. Não é tão difícil quanto parece, basta verificar o aplicativo de código aberto no link.
Frequentemente, recebo o erro " logcat read: Invalid argument". Eu tive que limpar o log, antes de ler o log.
Eu faço assim:
prompt> cd ~/Desktop
prompt> adb logcat -c
prompt> adb logcat | tee log.txt
Uma maneira simples é criar seus próprios métodos de coletor de log ou mesmo apenas um aplicativo coletor de log existente no mercado.
Para meus aplicativos, criei uma funcionalidade de relatório que envia os logs para o meu email (ou mesmo para outro local - depois de obter o log, você pode fazer o que quiser).
Aqui está um exemplo simples sobre como obter o arquivo de log de um dispositivo:
Simples, basta executar o seguinte comando para obter a saída para o seu terminal:
adb shell logcat
Sei que é uma pergunta antiga, mas acredito que ainda é válida até em 2018.
Há uma opção para obter um relatório de erro oculto nas opções do desenvolvedor em todos os dispositivos Android.
NOTA: Isso despejaria o log inteiro do sistema
Como habilitar as opções do desenvolvedor? consulte: https://developer.android.com/studio/debug/dev-options
O que funciona para mim:
como ler isso? open bugreport-1960-01-01-hh-mm-ss.txt
você provavelmente deseja procurar algo assim:
------ SYSTEM LOG (logcat -v threadtime -v printable -d *:v) ------
--------- beginning of crash
06-13 14:37:36.542 19294 19294 E AndroidRuntime: FATAL EXCEPTION: main
ou:
------ SYSTEM LOG (logcat -v threadtime -v printable -d *:v) ------
--------- beginning of main
Graças ao user1354692, fiquei mais fácil, com apenas uma linha! o que ele comentou:
try {
File file = new File(Environment.getExternalStorageDirectory(), String.valueOf(System.currentTimeMillis()));
Runtime.getRuntime().exec("logcat -d -v time -f " + file.getAbsolutePath());}catch (IOException e){}
OnCreate?
Dois passos:
- Gere o log
- Carregue o Gmail para enviar o log
.
Gere o log
File generateLog() {
File logFolder = new File(Environment.getExternalStorageDirectory(), "MyFolder");
if (!logFolder.exists()) {
logFolder.mkdir();
}
String filename = "myapp_log_" + new Date().getTime() + ".log";
File logFile = new File(logFolder, filename);
try {
String[] cmd = new String[] { "logcat", "-f", logFile.getAbsolutePath(), "-v", "time", "ActivityManager:W", "myapp:D" };
Runtime.getRuntime().exec(cmd);
Toaster.shortDebug("Log generated to: " + filename);
return logFile;
}
catch (IOException ioEx) {
ioEx.printStackTrace();
}
return null;
}Carregue o Gmail para enviar o log
File logFile = generateLog();
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(logFile));
intent.setType("multipart/");
startActivity(intent);Referências para # 1
~~
Para o número 2 - existem muitas respostas diferentes para saber como carregar o arquivo de log para visualizar e enviar. Finalmente, a solução aqui realmente funcionou para ambos:
- carregar o Gmail como uma opção
- anexa o arquivo com sucesso
Muito obrigado a https://stackoverflow.com/a/22367055/2162226 pela resposta correta
Primeiro, verifique se o comando adb é executável configurando PATH para android sdk platform-tools:
export PATH=/Users/espireinfolabs/Desktop/soft/android-sdk-mac_x86/platform-tools:$PATH
então corra:
adb shell logcat > log.txt
OU primeiro passo para as ferramentas da plataforma adb:
cd /Users/user/Android/Tools/android-sdk-macosx/platform-tools
então corra
./adb shell logcat > log.txt