145 votes

Comment obtenir le fichier journal d'un appareil Android ?

Je voudrais transférer le fichier journal d'un appareil vers mon PC. Comment puis-je le faire ?

125voto

Macarse Points 36519

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

Lorsque je veux obtenir le fichier journal pour l'envoyer par courrier, je fais généralement ce qui suit :

0 votes

Cette ligne de commande ne fonctionne pas pour moi, j'obtiens cette sortie. logcat read : Argument non valide

5 votes

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

12 votes

N'y a-t-il pas simple un moyen de simplement extraire le fichier journal du périphérique une fois qu'il est connecté via USB comme périphérique de stockage externe, sans avoir besoin d'installer adb ou quelque chose comme ça ?

35voto

user1354692 Points 43

J'espère que ce code pourra aider quelqu'un. Il m'a fallu 2 jours pour comprendre comment se connecter à partir de l'appareil, et ensuite 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 la permission au manifeste pour la lecture des logs

<uses-permission android:name="android.permission.READ_LOGS" />

1 votes

Cela fonctionne bien, mais pour que cela fonctionne sur tous les appareils, il faut <uses-permission android:name="android.permission.READ_LOGS" />

31voto

Rohit Points 71

J'utiliserais quelque chose de ce genre :

$adb logcat -d > logcat.txt

L'option -d permet de vider la totalité du tampon circulaire dans le fichier texte. Si vous recherchez une action/intentation particulière, essayez

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

J'espère que cela vous aidera :)

11voto

Brad Hein Points 4874

EDIT :

Le journal interne est un tampon circulaire en mémoire. Il existe en fait plusieurs tampons circulaires de ce type pour chacun des éléments suivants : radio, events, 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 de type chaîne.

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

La clé est d'exécuter logcat sur l'appareil dans le système d'exploitation embarqué. Ce n'est pas aussi difficile que ça en a l'air, il suffit de regarder l'application open source dans le lien.

0 votes

Ceci envoie la sortie à l'écran, j'en ai besoin dans un fichier.

0 votes

Vous pouvez envoyer des journaux avec unLogCat. Ou simplement copier-coller depuis le DDMS :P

0 votes

@molnarm Je concède que ma réponse était légèrement sur-engagée si c'est tout ce qu'il doit faire =)

8voto

neoneye Points 11545

Je reçois souvent 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

0 votes

Merci ! J'avais cette erreur depuis longtemps, ce logcat -c l'a réparé immédiatement !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X