Comment obtenir le fichier journal à partir d'un appareil Android?

129

Je souhaite extraire le fichier journal d'un appareil vers mon PC. Comment puis je faire ça?

Pentium10
la source

Réponses:

112

Logcollector est une bonne option, mais vous devez d'abord l'installer.

Lorsque je souhaite envoyer le fichier journal par courrier électronique, je fais généralement ce qui suit:

Macarse
la source
Cette ligne de commande ne fonctionne pas pour moi, j'obtiens cette sortie. logcat read: Argument non valide
neoneye
5
notez que logcollector ne fonctionne pas pour les versions d'Android supérieures à 4.1 car les applications ne sont désormais autorisées à lire que leurs propres entrées de journal. ( groups.google.com/forum/#!topic/android-log-collector/… )
Matthew Lowe
11
N'existe-t-il pas une méthode simple , un moyen de simplement extraire le fichier journal de l'appareil une fois qu'il est connecté via USB en tant que périphérique de stockage externe, sans avoir besoin d'installer adb ou quelque chose comme ça?
OR Mapper
Assurez-vous que vous êtes dans le bon répertoire pour exécuter adb. Habituellement enC:\Users\[your username]\AppData\Local\Android\Sdk\platform-tools\
lolololol ol
30

J'espère que ce code aidera quelqu'un. Il m'a fallu 2 jours pour comprendre comment me connecter à partir de l'appareil, puis le filtrer:

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;
    }

comme indiqué par @mehdok

ajouter l'autorisation au manifeste pour la lecture des journaux

<uses-permission android:name="android.permission.READ_LOGS" />
user1354692
la source
1
cela fonctionne bien, mais pour fonctionner sur tous les appareils dont vous avez besoin<uses-permission android:name="android.permission.READ_LOGS" />
mehdok
27

J'utiliserais quelque chose de ce genre:

$adb logcat -d > logcat.txt

L'option -d vide la totalité du tampon circulaire dans le fichier texte et si vous recherchez une action / intention particulière, essayez

$adb logcat -d | grep 'com.whatever.you.are.looking.for' -B 100 -A 100 > shorterlog.txt

J'espère que cela t'aides :)

Rohit
la source
13

Pour ceux qui ne sont pas intéressés par le débogage USB ou l'utilisation, adbil existe une solution plus simple. Dans Android 6 (pas sûr de la version précédente), il existe une option sous les outils de développement: Take Bug Report

Cliquez sur cette option pour préparer un rapport de bogue et vous inviter à l'enregistrer sur le lecteur ou à le faire envoyer par courrier électronique.

J'ai trouvé que c'était le moyen le plus simple d'obtenir des journaux. Je n'aime pas activer le débogage USB.

jjhavokk
la source
1
Exactement ce que je cherchais!
YYamil
1
Où puis-je le trouver exactement?
gurehbgui
11

ÉDITER:

Le journal interne est un tampon circulaire en mémoire. Il existe en fait quelques tampons circulaires pour chacun des éléments suivants: radio, événements, main. La valeur par défaut est main.

Pour obtenir une copie d'un tampon, une technique consiste à exécuter une commande sur le périphérique et à obtenir la sortie sous forme de variable chaîne.

SendLog est une application open source qui fait exactement cela: http://www.l6n.org/android/sendlog.shtml

La clé est de s'exécuter logcatsur l'appareil dans le système d'exploitation intégré. Ce n'est pas aussi difficile que cela en a l'air, il suffit de consulter l'application open source dans le lien.

Brad Hein
la source
Cela vide la sortie à l'écran, j'en ai besoin dans un fichier.
Pentium
Vous pouvez envoyer des journaux avec aLogCat. Ou simplement copier-coller de DDMS: P
molnarm
@molnarm Je concède que ma réponse a été légèrement sur-conçue si c'est tout ce qu'il a à faire =)
Brad Hein
@BradHein Vous avez dit que SendLog était open source mais je n'arrive pas à trouver le code source. Une idée où c'est?
smith324
8

Souvent, j'obtiens l'erreur " logcat read: Invalid argument". J'ai dû effacer le journal avant de lire le journal.

J'aime ça:

prompt> cd ~/Desktop
prompt> adb logcat -c
prompt> adb logcat | tee log.txt
neoneye
la source
Merci! J'avais cette erreur depuis longtemps, ce logcat -c l'a corrigée immédiatement!
Jords
4

Un moyen simple consiste à créer vos propres méthodes de collecte de journaux ou même simplement une application de collecte de journaux existante du marché.

Pour mes applications, j'ai créé une fonctionnalité de rapport qui envoie les journaux à mon courrier électronique (ou même à un autre endroit - une fois que vous obtenez le journal, vous pouvez le faire si vous le souhaitez).

Voici un exemple simple sur la façon d'obtenir le fichier journal à partir d'un appareil:

Mousse
la source
3

Simple, exécutez simplement la commande suivante pour obtenir la sortie sur votre terminal:

adb shell logcat
Weston Ganger
la source
3

Je sais que c'est une vieille question, mais je crois toujours valable même en 2018.

Il existe une option pour prendre un rapport de bogue caché dans les options de développement de chaque appareil Android.

REMARQUE: cela viderait le journal du système entier

Comment activer les options de développement? voir: https://developer.android.com/studio/debug/dev-options

Ce qui fonctionne pour moi:

  1. Redémarrez votre appareil (afin de créer un minimum de journaux de déchets à analyser par le développeur)
  2. Reproduisez votre bug
  3. Allez dans Paramètres -> Options du développeur -> Prendre un rapport de bogue
  4. Attendez que le système Android collecte les journaux (regardez la barre de progression dans la notification)
  5. Une fois terminé, appuyez sur la notification pour la partager (vous pouvez utiliser gmail ou n'importe quoi d'autre)

comment lire ceci? ouvrir bugreport-1960-01-01-hh-mm-ss.txt

vous voulez probablement rechercher quelque chose comme ceci:

------ 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
Piotr Z
la source
2

Grâce à user1354692, j'ai pu rendre les choses plus faciles, avec une seule ligne! celui qu'il a commenté:

try {
    File file = new File(Environment.getExternalStorageDirectory(), String.valueOf(System.currentTimeMillis()));
    Runtime.getRuntime().exec("logcat -d -v time -f " + file.getAbsolutePath());}catch (IOException e){}
jfcogato
la source
où est le meilleur endroit pour mettre ce code? dans OnCreate?
Youngjae
2

J'ai créé une petite bibliothèque (.aar) pour récupérer les logs par email. Vous pouvez l'utiliser avec des comptes Gmail. C'est assez simple mais ça marche. Vous pouvez en obtenir une copie d'ici

Le site est en espagnol, mais il existe un PDF avec une version anglaise de la description du produit.

J'espère que cela peut aider.

lm2a
la source
2

Deux étapes:

  • Générer le journal
  • Chargez Gmail pour envoyer le journal

.

  1. Générer le journal

    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;
    }
  2. Chargez Gmail pour envoyer le journal

    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);

Références pour # 1

~~

Pour # 2 - il existe de nombreuses réponses différentes pour savoir comment charger le fichier journal à afficher et à envoyer. Enfin, la solution ici fonctionnait à la fois:

  • charger Gmail en option
  • joint le fichier avec succès

Un grand merci à https://stackoverflow.com/a/22367055/2162226 pour la réponse qui fonctionne correctement

Gene Bo
la source
0

Assurez-vous d'abord que la commande adb est exécutable en définissant PATH sur android sdk platform-tools:

export PATH=/Users/espireinfolabs/Desktop/soft/android-sdk-mac_x86/platform-tools:$PATH

puis exécutez:

adb shell logcat > log.txt

OU passez d'abord aux outils de la plate-forme adb:

cd /Users/user/Android/Tools/android-sdk-macosx/platform-tools 

puis courir

./adb shell logcat > log.txt
Aqib Mumtaz
la source