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 :
- Dans Android Studio, compilez et exécutez votre application sur un appareil physique ou dans un émulateur.
- 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) dans la barre d'outils. Vous pouvez également utiliser la barre d'outils pour effacer, suspendre ou redémarrer 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) 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) . 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.
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.
Interroger les journaux à l'aide de la recherche par clé-valeur
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.
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 champtag
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 etd
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
oud
(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) à 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.
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.
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é.