Afficher les journaux avec Logcat

Dans Android Studio, la fenêtre Logcat vous aide à déboguer votre application en affichant les journaux de votre appareil en temps réel, par exemple les messages que vous avez ajoutés à votre application avec la classe Log, les messages de services exécutés sur Android ou les messages système tels que les événements de récupération de mémoire. Lorsqu'une application génère une exception, Logcat affiche un message suivi de la trace de la pile associée contenant les liens vers la ligne de code.

Premiers pas avec la fenêtre Logcat

Pour afficher les messages de journal de votre application, procédez comme suit :

  1. Dans Android Studio, compilez et exécutez votre application sur un appareil physique ou dans un émulateur.
  2. Sélectionnez View > Tool Windows > Logcat (Vues > Fenêtres d'outils > Logcat) dans la barre de menu.

Par défaut, Logcat fait défiler l'écran jusqu'à la fin. Cliquez sur la vue Logcat ou faites défiler l'écran vers le haut avec la molette de la souris pour désactiver cette fonctionnalité. Pour la réactiver, cliquez sur Scroll to the End (Faire défiler jusqu'à la fin) Icône Scroll to the End (Faire défiler jusqu'à la fin) dans la barre d'outils. Vous pouvez également utiliser la barre d'outils pour effacer, suspendre ou redémarrer Logcat.

UI de la fenêtre Logcat

Figure 1 : Logcat met en forme les journaux pour faciliter l'analyse des informations utiles, telles que les balises et les messages, et pour identifier différents types de journaux, tels que les avertissements et les erreurs.

Lire les journaux

Chaque journal est associé à une date, un code temporel, un ID de processus et de thread, une balise, un nom de package, une priorité et un message. Chaque balise dispose d'une couleur unique qui permet d'identifier le type de journal. Chaque entrée de journal a une priorité FATAL, ERROR, WARNING, INFO, DEBUG ou VERBOSE.

Par exemple, le message de journal suivant a la priorité DEBUG et la balise ProfileInstaller :

2022-12-29 04:00:18.823 30249-30321 ProfileInstaller        com.google.samples.apps.sunflower    D  Installing profile for com.google.samples.apps.sunflower

Configurer la vue du journal

La vue de journal standard affiche la date, l'heure, l'ID de processus et de thread, la balise, le nom du package, la priorité et le message qui y sont associés. Par défaut, les lignes de message ne sont pas encapsulées dans la vue du journal, mais vous pouvez utiliser l'option Soft-wrap (Retour à la ligne) Icône Soft-Wrap (Retour à la ligne) de la barre d'outils Logcat.

Vous pouvez passer à la vue Compact (Compacte), qui affiche moins d'informations par défaut, en cliquant sur Configure Logcat Formatting Options (Configurer les options de mise en forme Logcat)  dans la barre d'outils Logcat.

Pour configurer davantage la quantité d'informations à afficher, sélectionnez Modify Views (Modifier les vues), puis indiquez si vous souhaitez afficher le code temporel, les balises, les ID de processus ou les noms de packages.

Changer le jeu de couleurs

Pour modifier le jeu de couleurs, accédez à Android Studio > Settings > Editor > Color Scheme (Android Studio > Paramètres > Éditeur > Jeu de couleurs). Pour modifier le jeu de couleurs de la vue de votre journal, sélectionnez Android Logcat. Pour modifier le jeu de couleurs de votre filtre, sélectionnez Logcat Filter (Filtre Logcat).

Options de configuration supplémentaires

Pour accéder à d'autres options de configuration, accédez à Android Studio > Settings > Tools > Logcat (Android Studio > Paramètres > Outils > Logcat). Vous pouvez alors choisir la taille de la mémoire tampon du cycle Logcat et le filtre par défaut pour les nouvelles fenêtres Logcat, ainsi qu'indiquer si vous souhaitez ajouter des filtres de l'historique à la saisie semi-automatique.

Utiliser Logcat dans plusieurs fenêtres

Les onglets vous permettent de basculer facilement entre différents appareils ou requêtes. Vous pouvez créer plusieurs onglets Logcat en cliquant sur New Tab (Nouvel onglet) Icône New Tab (Nouvel onglet). Pour renommer et réorganiser un onglet, effectuez un clic droit dessus.

Vous pouvez également diviser la vue dans un onglet pour comparer plus facilement deux ensembles de journaux. Pour créer une division, effectuez un clic droit dans la vue du journal ou cliquez sur l'option Split Panels (Panneaux divisés) dans la barre d'outils, puis sélectionnez Split Right (Diviser à droite) ou Split Down (Diviser en bas). Pour fermer une division, effectuez un clic droit et sélectionnez Close (Fermer). Chaque division vous permet de définir sa propre connexion d'appareil, ses propres options d'affichage et sa propre requête.

Plusieurs fenêtres Logcat Figure 2 : Diviser des fenêtres Logcat dans Android Studio

Dans la barre d'outils Logcat, vous pouvez faire défiler l'écran jusqu'à la fin des journaux ou cliquer sur une ligne particulière pour la maintenir visible.

Dans Android Studio, vous pouvez générer des recherches par clé-valeur directement depuis le champ de requête principal. Ce système de requête vous permet de faire des recherches précises et exclut également les journaux en fonction de clés-valeurs. Vous pouvez utiliser des expressions régulières, vous n'en avez pas besoin pour les requêtes. Pour afficher des suggestions, appuyez sur Ctrl+Space dans le champ de requête.

Liste de suggestions dans le champ de requête Figure 3 : Appuyez sur Ctrl+Space dans le champ de requête pour afficher la liste des requêtes suggérées.

Voici quelques exemples de clés que vous pouvez utiliser dans votre requête :

  • tag : établit une correspondance avec le champ tag de l'entrée de journal.
  • package : établit une correspondance avec le nom de package de l'application de journalisation.
  • process : établit une correspondance avec le nom de processus de l'application de journalisation.
  • message : établit une correspondance avec la partie message de l'entrée de journal.
  • level : établit une correspondance avec le niveau de journalisation grave spécifié ou un niveau supérieur (par exemple, DEBUG).
  • age : établit une correspondance si le code temporel de l'entrée est récent. Les valeurs sont spécifiées sous la forme d'un nombre suivi d'une lettre spécifiant l'unité de temps : s pour les secondes, m pour les minutes, h pour les heures et d pour les jours. Par exemple, age: 5m filtre uniquement les messages enregistrés dans les 5 dernières minutes.

Négation et expressions régulières

Les champs suivants sont compatibles avec la correspondance de négation et d'expression régulière : tag, package, message et line.

La négation est exprimée en ajoutant un préfixe - au nom du champ. Par exemple, -tag:MyTag établit une correspondance avec les entrées de journal dont le champ tag ne contient pas la chaîne MyTag.

La correspondance d'expression régulière est exprimée en ajoutant ~ au nom du champ. Par exemple, tag~:My.*Tag.

Les modificateurs de négation et d'expression régulière peuvent être combinés. Par exemple : -tag~:My.*Tag.

Opérateurs logiques et parenthèses

Le langage de requête accepte les opérateurs AND et OR, exprimés par &, | et des parenthèses. Exemple :

(tag:foo | level:ERROR) & package:mine

Notez que la priorité normale des opérateurs est appliquée. La requête suivante :

tag:foo | level:ERROR & package:mine

est donc évaluée comme suit :

tag:foo | (level:ERROR & package:mine)

Opérateurs logiques implicites

Si aucun opérateur logique n'est appliqué, le langage de requête évalue automatiquement plusieurs termes de filtre key-value sans négation en appliquant un opérateur OR, et applique un opérateur AND pour tout le reste.

Exemple :

tag:foo tag:bar package:myapp

est évaluée comme suit :

(tag:foo | tag:bar) & package:myapp

Mais :

tag:foo -tag:bar package:myapp

est évaluée comme suit :

tag:foo & -tag:bar & package:myapp

Si plusieurs termes de requête sont séparés par un espace blanc sans opérateur logique, ils sont traités comme avec un opérateur AND, avec une priorité faible. Par exemple, foo bar tag:bar1 | tag:bar2 équivaut à 'foo bar' & (tag: bar1 | tag: bar2).

Requêtes spéciales

package:mine

La clé du package accepte une valeur spéciale mine. Cette valeur spéciale établit une correspondance avec tous les noms de package contenus dans le projet ouvert.

level

La requête level établit une correspondance avec le niveau de journalisation du message Logcat, où le niveau d'entrée de journal est supérieur ou égal au niveau de requête.

Par exemple, level:INFO établit une correspondance avec toute entrée de journal dont le niveau de journalisation est INFO, WARN, ERROR ou ASSERT. Le niveau n'est pas sensible à la casse. Les niveaux valides sont les suivants : VERBOSE, DEBUG, INFO, WARN, ERROR et ASSERT.

age

La requête age établit une correspondance avec les entrées en fonction de leur code temporel et adopte le format age:<number><unit>, où

  • <number> est un entier ;
  • <unit> est l'un des éléments suivants : s, m, h ou d (secondes, minutes, heures et jours).

D'après la liste suivante, la requête age correspond aux messages de journal dont le code temporel est compris dans la plage décrite par la valeur. Par exemple, la requête age:5m établit une correspondance avec les entrées dont le code temporel date d'au moins cinq minutes.

age:30s
age:5m
age:3h
age:1d

Notez que le code temporel est comparé à celui de l'hôte, et non à l'appareil connecté. Si l'heure de l'appareil n'est pas définie correctement, cette requête risque de ne pas fonctionner comme prévu.

Clé is

Vous pouvez utiliser la clé is comme suit :

  • is:crash établit une correspondance avec les entrées de journal qui représentent un plantage de l'application (native ou Java).
  • is:stacktrace établit une correspondance avec les entrées de journal qui représentent tout ce qui ressemble à une trace de la pile Java, quel que soit son niveau de journalisation.

Clé name

La clé name vous permet de donner un nom unique à un filtre enregistré afin de l'identifier facilement dans le menu déroulant de l'historique des filtres. Vous ne recevez aucune erreur si vous spécifiez name plusieurs fois, mais l'IDE n'utilise que la dernière valeur spécifiée de name dans la requête.

Afficher l'historique des requêtes

Vous pouvez afficher l'historique de vos requêtes en cliquant sur Show history (Afficher l'historique) Icône de filtre à côté du champ de requête. Pour ajouter une requête aux favoris et la placer en tête de liste sur tous vos projets Studio, cliquez sur l'étoile à côté de celle-ci. Vous pouvez également utiliser la clé name: pour faciliter la reconnaissance des requêtes favorites. Pour en savoir plus, consultez la section Requêtes spéciales.

UI pour ajouter une requête aux favoris

Figure 4 : Cliquer sur l'étoile à côté d'une requête pour l'ajouter aux favoris

Suivre les journaux de plantages et de redémarrages de l'application

Lorsque Logcat remarque que le processus de votre application s'est arrêté et a redémarré, un message tel que PROCESS ENDED et PROCESS STARTED s'affiche dans la sortie. Le redémarrage de Logcat conserve la configuration de votre session, comme les divisions d'onglet, les filtres et les options d'affichage, pour que vous puissiez poursuivre facilement votre session.

Fenêtre Logcat pour les plantages de l&#39;application

Figure 5 : Lorsque le processus de votre application redémarre, Logcat affiche un message indiquant que le processus s'est terminé, puis qu'il a démarré.