Skip to main content

Production et analyse des journaux

Objectifs de formation

Une fois cette unité terminée, vous pourrez :
  • Afficher les journaux de débogage dans l’Inspecteur de journaux ou dans un éditeur de texte.
  • Définir différents niveaux de consignation pour les journaux de débogage.
  • Gérer les perspectives et en changer à l’aide de l’Inspecteur de journaux.
Remarque

Remarque

Vous souhaitez apprendre en français ? Commencez le défi dans un Trailhead Playground en français et utilisez les traductions fournies entre crochets pour naviguer. Copiez et collez uniquement les valeurs en anglais, car les validations de défi reposent sur les données en anglais. Si vous ne réussissez pas le défi dans votre organisation en français, nous vous recommandons (1) de définir le paramètre régional sur les États-Unis, (2) de définir la langue sur l’anglais en suivant les instructions ici, puis (3) de cliquer à nouveau sur le bouton « Vérifier le défi ».

Consultez le badge Trailhead dans votre langue pour découvrir comment profiter de l’expérience Trailhead traduite.

Affichage des journaux de débogage

Vous êtes un commandant responsable, vous passez donc régulièrement en revue les journaux du système pour vérifier que tout est en ordre. C’est en cherchant dans les journaux que vous avez le plus de chance d’identifier les problèmes d'un système ou d'un programme. Avec la Developer Console, vous pouvez examiner différents journaux de débogage pour comprendre le fonctionnement de votre code et identifier les problèmes de performance.

Afficher les journaux dans l’éditeur de texte

Les journaux de débogage sont faciles d'accès. Pour générer un journal, exécutons la classe Apex EmailMissionSpecialist que vous avez créée auparavant.

Vous pouvez afficher le journal de deux façons.
  • Avant d’exécuter le code, activez Open Log (Ouvrir le journal) dans la fenêtre Enter Apex Code (Entrer du code Apex). Le journal s’ouvre après l’exécution du code.
  • Après l’exécution du code, double-cliquez sur le journal qui apparaît dans l’onglet Logs (Journaux).
Essayons la première méthode.
  1. Sélectionnez Debug (Débogage) | Open Execute Anonymous Window (Ouvrir la fenêtre d’exécution anonyme).
  2. La fenêtre Enter Apex Code (Entrer du code Apex) affiche le dernier code saisi pour exécution. S’il ne s'agit pas du code suivant, effacez-le et collez celui-ci à la place. N’oubliez pas de remplacer Enter your email address par votre adresse e-mail.
    EmailMissionSpecialist em = new EmailMissionSpecialist();
    em.sendMail('Enter your email address', 'Flight Path Change', 
       'Mission Control 123: Your flight path has been changed to avoid collision '
       + 'with asteroid 2014 QO441.');
  3. Sélectionnez l’option Open Log (Ouvrir le journal).
  4. Cliquez sur Execute (Exécuter).

Pour le moment, le journal d’exécution qui s'affiche ressemble certainement à un amas informe de chiffres et de mots : voyons un peu comment lire et comprendre les données de journal.

Résultats du journal

Lire les données du journal

Nous allons à nouveau exécuter la classe EmailMissionSpecialist, mais cette fois elle contiendra une erreur. Nous irons ensuite voir le journal généré dans l’onglet Journaux.

  1. Sélectionnez Debug (Débogage) | Open Execute Anonymous Window (Ouvrir la fenêtre d’exécution anonyme). Fournissez une adresse e-mail non valide comme testingemail.
    EmailMissionSpecialist em = new EmailMissionSpecialist();
    em.sendMail('testingemail', 'Flight Path Change', 
       'Mission Control 123: Your flight path has been changed to avoid collision '
       + 'with asteroid 2014 QO441.');
  2. Désélectionnez l’option Open Log (Ouvrir le journal).
  3. Cliquez sur Execute (Exécuter). Une fois le code exécuté, une boîte de dialogue s’affiche pour présenter l’erreur. Erreur d'exécution anonyme
  4. Cliquez sur OK, puis double-cliquez sur le nouveau journal de l’onglet Journaux. Si vous ne savez pas quel journal est le plus récent, cliquez sur l’en-tête de la colonne Time pour trier les journaux en fonction de l’heure à laquelle ils ont été générés.Résultats du journal
Vous pouvez lire un journal de débogage en identifiant à quoi correspond chaque colonne.
  • Timestamp : heure à laquelle un événement est survenu. L’horodatage est toujours indiqué dans le fuseau horaire de l’utilisateur, au format HH:mm:ss:SSS.
  • Event : événement qui a déclenché la création de l’entrée dans le journal de débogage. Par exemple, dans le journal d’exécution que vous avez généré, l'événement FATAL_ERROR a été consigné quand l’adresse e-mail a été évaluée comme invalide.
  • Details : informations sur la ligne de code et le nom de la méthode où le code a été exécuté.
Options d'affichage des résultats du journal

Vous pouvez modifier ce qui s’affiche dans le Journal d’exécution en sélectionnant This Frame (a), Executable (b), ou Debug Only (Débogage seulement) (c). Lorsque vous sélectionnez ces options, seuls certains types d'événements s'affichent. Par exemple, Débogage seulement affiche uniquement les événements USER_DEBUG. Vous pouvez aussi filtrer différentes parties du journal à l’aide de Filter (d). Saisissez un nom de méthode ou le fragment de texte que vous recherchez, et le journal filtre alors les résultats.

Vous pouvez également afficher le journal de débogage sous sa forme brute, qui présente plus d'informations. Sélectionnez File (Fichier) | Open Raw Log (Ouvrir le journal brut). L’horodatage du journal brut indique le temps écoulé depuis le début de l’événement en nanosecondes (entre parenthèses).

Horodatage, événement et détails dans un journal

La combinaison de l’horodatage, de l’événement et des détails offre des renseignements inestimables sur le fonctionnement de votre code et les erreurs qui se produisent.

Cette masse d'information est certainement très utile, mais vous voulez sans doute consulter rapidement des valeurs spécifiques dans le journal. Après tout, vous avez beaucoup à faire en tant que commandant. C’est là que la méthode Apex System.debug() montre tout son intérêt.

En effet, l’avantage de System.debug() est que vous pouvez l’insérer à n’importe quel point de votre code pour suivre des valeurs et ainsi déboguer précisément votre code.

Voici la syntaxe de System.debug(). Pour afficher un message :
System.debug('Your Message');
Pour afficher la valeur d'une variable :
System.debug(yourVariable);
Pour afficher une valeur étiquetée :
System.debug('Your Label: ' + yourVariable);

Utilisation de Log Inspector

Très pratique, l’inspecteur de journaux est là pour faciliter la consultation des fichiers journaux volumineux. Il utilise une présentation en panneaux pour offrir différentes perspectives sur votre code. Pour en avoir un aperçu, sélectionnez Debug (Débogage) | View Log Panels (Afficher les panneaux de journaux).

Remarque

L’option de menu Déboguer | Afficher les panneaux de journaux est disponible uniquement lorsque vous consultez un onglet du journal de débogage. Si vous êtes, par exemple, en train de consulter l’onglet du journal brut, cette option est grisée.

Les panneaux de journaux changent la structure du journal pour fournir d'autres informations utiles sur le contexte du code exécuté. Par exemple, certains panneaux indiquent la source, les temps d’exécution, la taille dans la mémoire et la hiérarchie d'appels. (Désolés, encore du jargon geek… Il faut dire que cette section est relativement technique. N’oubliez pas que nous voulons surtout découvrir la Developer Console et pas comprendre les finesses du débogage. Si certaines choses vous laissent perplexe, essayez de ne pas trop vous en soucier.)

Ces panneaux de journaux interagissent les uns avec les autres pour vous aider à déboguer votre propre code. Par exemple, quand vous cliquez sur une entrée de journal dans le journal d’exécution ou l’arborescence de la pile, les autres panneaux (Source, Liste des sources, Variables et Pile d'exécution) sont actualisés pour vous présenter les informations connexes.

Tous les panneaux de journaux
L’inspecteur de journaux propose les panneaux suivants.
  1. Arborescence de la pile : affiche les entrées de journal dans la hiérarchie de leurs objets et de leur exécution sous la forme d’une arborescence descendante. Par exemple, si une classe appelle une autre classe, la deuxième est présentée comme l’enfant de la première.
  2. Pile d'exécution : affiche une vue de bas en haut de l’élément sélectionné. Cette vue présente l’entrée de journal suivie par l’opération qui l’a appelée.
  3. Journal d'exécution : affiche chaque action qui s’est produite au cours de l’exécution de votre code.
  4. Source : affiche le contenu du fichier source en indiquant la ligne de code en cours d’exécution lorsque l’entrée a été générée.
  5. Liste des sources : affiche le contexte du code en cours d’exécution au moment de la consignation de l'événement. Par exemple, si vous sélectionnez l’entrée de journal générée lorsque la valeur d’adresse e-mail erronée a été saisie, le panneau Liste des sources affiche execute_anonymous_apex.
  6. Variables : affiche les variables et leurs valeurs affectées incluses dans la portée lors de l’exécution du code qui a généré l’entrée de journal sélectionnée.
  7. Vue d'ensemble de l'exécution : affiche des statistiques sur le code exécuté, comme sa durée d’exécution et la taille en mémoire.

Qu’est-ce que le Gestionnaire de perspectives et comment passer de l’une à l’autre ?

Une perspective est un agencement de panneaux. Par exemple, la perspective prédéfinie Débogage affiche les panneaux Journal d'exécution, Source et Variables, tandis que la perspective Analyse affiche les panneaux Arborescence d'exécution, Journal d'exécution, Pile d'exécution et Vue d'ensemble de l'exécution.

Pour choisir une perspective, sélectionnez Debug (Débogage) |Switch Perspectives (Changer de perspective) ou Debug (Débogage) | Perspective Manager (Gestionnaire de perspectives). Eh oui, c’est aussi simple que de naviguer entre différents panneaux de communication, et bien plus facile que d’essayer de déchiffrer les journaux de votre Expert de mission, de la Station spatiale terrestre et de la Base martienne, tous rassemblés dans la même vue.

Vous pouvez également créer votre propre perspective. Configurez votre combinaison préférée de panneaux, puis sélectionnez Debug (Débogage) | Save Perspective As (Enregistrer la perspective sous). Donnez un nom à votre perspective et cliquez sur OK.

Manipuler les données du journal pour trouver ce que vous cherchez

Vous savez que le moteur 3 a parfois quelques petites faiblesses. Pourtant, il faudra que ce moteur fonctionne au top de ses capacités quand vous exécuterez la manœuvre pour éviter l’astéroïde 2014 QO441. Mais à chaque fois que vous faites un contrôle du système, vous recevez aussi des informations d’un certain robot déprimé qui hante les couloirs de votre vaisseau. Il vous inonde de rapports illisibles sur une prochaine révolte des machines, ce qui augmente le nombre de lignes de votre journal et vous fait peut-être rater des informations précieuses.

Il vous faut un moyen de contrôler la quantité d’informations enregistrées. Heureusement pour vous, c’est exactement ce que fait la Developer Console avec les catégories et les niveaux de consignation

Catégories de consignation

Une catégorie de consignation désigne le type d'informations enregistré.

Voici deux catégories de consignation courantes.
  • ApexCode, qui enregistre les événements associés au code Apex et inclut des informations sur le début et la fin d’une méthode Apex.
  • Database, qui inclut les journaux des événements associés aux bases de données, comme les requêtes Database Manipulation Language (DML), SOSL et SOQL (que nous verrons plus en détail un peu plus tard).

Les niveaux de consignation : qui sont-ils ? Comment les modifier ?

On dirait que le moteur 3 a encore des problèmes. En parcourant les journaux pour en comprendre la cause, vous voyez des messages d'avertissement concernant la révolte du robot mélancolique.

Il faut plus qu’un robot pour faire une révolution, si bien que les avertissements ne vous inquiètent pas trop. Le moteur défectueux, par contre, est une véritable urgence. Imaginez que vous perdiez la trace des messages vraiment pertinents du moteur 3 au milieu de toutes ces données. C’est là que les niveaux de consignation interviennent !

Les niveaux de consignation contrôlent la quantité de détails enregistrés dans chaque catégorie. La Developer Console propose les niveaux suivants dans l’ordre croissant de la quantité de données consignées, de NONE (aucune donnée) à FINEST (le niveau le plus détaillé).
  • NONE
  • ERROR
  • WARN
  • INFO
  • DEBUG
  • FINE
  • FINER
  • FINEST

Les niveaux de consignation sont cumulatifs. Par exemple, si le niveau de journal d'un événement est INFO, les informations correspondant aux niveaux ERROR et WARN sont également incluses. Mais si vous sélectionnez le niveau de consignation ERROR, vous ne recevez que les messages d'erreur. Vous ne recevrez pas les messages d'avertissement ni aucune autre information correspondant à cette catégorie de consignation.

Les informations fournies par un niveau de consignation dépendent également de l’événement. Certains événements de journal ne sont consignés qu’à des niveaux de consignation définis. Par exemple, certains événements de code Apex ne sont consignés qu’à partir du niveau INFO. Si vous choisissez ERROR comme niveau de consignation, vous ne recevrez aucune information sur ces événements.

Pour recevoir les informations que vous cherchez, modifiez les niveaux de consignation en fonction des événements. Aujourd’hui, vous voulez surtout que le journal cesse d'ajouter une entrée à chaque fois que le robot enregistre un nouveau message sur sa mutinerie dans la base de données. Vous allez donc définir sélectionner le niveau NONE ou ERROR pour la catégorie Base de données (DB).

Pour définir ces niveaux, sélectionnez Debug (Débogage) | Change Log Levels (Modifier les niveaux de consignation).

Sélectionner des niveaux de consignation

Sous l’onglet General Trace Settings for You (Vos paramètres de suivi généraux), cliquez sur Add/Change (Ajouter/Modifier) (1). Dans la fenêtre Change DebugLevel (Modifier le niveau de débogage), choisissez le niveau de consignation de chaque catégorie. Vous devrez utiliser les niveaux de consignation de façon judicieuse. Si vous sélectionnez le niveau de consignation FINEST (2), votre code risque d'atteindre les limites du journal et s’exécuter plus lentement. Ne vous inquiétez pas si vous ne voyez pas tous les niveaux quand vous modifiez celui d’une catégorie. Seuls les niveaux qui augmentent la quantité de données consignées pour la catégorie s'affichent.

Heureusement, une fois que vous avez désactivé la consignation des avertissements du robot, vous n’avez plus aucun mal à identifier le problème du moteur 3 : Son niveau de liquide de refroidissement est bas. Vous envoyez un technicien ajouter du liquide de refroidissement. Et tant que vous y êtes, vous lui demandez de huiler les jointures du robot. Peut-être que ce témoignage d'affection lui mettra un peu de baume au cœur.

Partagez vos commentaires sur Trailhead dans l'aide Salesforce.

Nous aimerions connaître votre expérience avec Trailhead. Vous pouvez désormais accéder au nouveau formulaire de commentaires à tout moment depuis le site d'aide Salesforce.

En savoir plus Continuer à partager vos commentaires