Skip to main content

Generieren und Analysieren von Protokollen

Lernziele

Nachdem Sie diese Lektion abgeschlossen haben, sind Sie in der Lage, die folgenden Aufgaben auszuführen:
  • Anzeigen von Debug-Protokollen im Log Inspector oder einem Texteditor
  • Festlegen verschiedener Protokollierungsebenen für Ihre Debug-Protokolle
  • Verwalten und Wechseln von Perspektiven mit dem Log Inspector
Hinweis

Hinweis

Lernen Sie auf Deutsch? Beginnen Sie die Aufgabe in einem Trailhead Playground in der Sprache Deutsch und verwenden Sie für die Navigation die in Klammern angegebenen Übersetzungen. Kopieren und fügen Sie nur die Angaben in Englisch ein, da zur Überprüfung der Aufgabe Daten in Englisch benötigt werden. Wenn Sie die Aufgabe in Ihrer deutschen Organisation nicht bestehen, empfehlen wir Ihnen folgende Vorgehensweise: (1) Stellen Sie das Gebietsschema auf USA um, (2) legen Sie Englisch als Sprache fest (Anweisungen dazu finden Sie hier) und (3) klicken Sie erneut auf die Schaltfläche "Check Challenge" (Aufgabe überprüfen).

Weitere Details dazu, wie Sie die übersetzte Trailhead-Umgebung optimal nutzen können, finden Sie unter dem Badge "Trailhead in Ihrer Sprache".

Anzeigen von Debug-Protokollen

Als guter Raumschiffkapitän kontrollieren Sie die Systemprotokolle, um sicherzustellen, dass alles ordnungsgemäß funktioniert. Protokolle sind mit am besten dazu geeignet, Probleme bei einem System oder Programm festzustellen. Mit der Developer Console können Sie sich verschiedene Debug-Protokolle ansehen, um die Funktionsweise Ihres Codes zu verstehen und Leistungsprobleme zu identifizieren.

Anzeigen von Protokollen im Texteditor

Das Anzeigen eines Debug-Protokolls ist einfach. Zum Erstellen eines Protokolls führen wir die Apex-Klasse EmailMissionSpecialist aus, die Sie zu einem früheren Zeitpunkt erstellt haben.

Sie können Ihr Protokoll auf verschiedene Weisen anzeigen.
  • Vor der Ausführung aktivieren Sie dazu Open Log (Protokoll öffnen) im Fenster "Enter Apex Code (Apex-Code eingeben)". Das Protokoll wird nach der Ausführung Ihres Codes geöffnet.
  • Nach der Ausführung doppelklicken Sie dazu auf das Protokoll, das auf der Registerkarte "Logs (Protokolle)" aufgeführt wird.
Versuchen wir es mit der ersten Methode.
  1. Wählen Sie Debug (Debuggen) | Open Execute Anonymous Window (Fenster für die anonyme Ausführung öffnen) aus.
  2. Im Fenster "Enter Apex Code (Apex-Code eingeben)" wird der letzte Code angezeigt, den Sie zur Ausführung eingegeben haben. Löschen Sie diesen Code und fügen Sie den folgenden Code in das Fenster ein. Ersetzen Sie unbedingt Enter your email address (Geben Sie Ihre E-Mail-Adresse) durch Ihre E-Mail-Adresse.
    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. Aktivieren Sie die Option Open Log (Protokoll öffnen).
  4. Klicken Sie auf Execute (Ausführen).

Da das angezeigte Ausführungsprotokoll in Ihren Augen wahrscheinlich nur aus einer verwirrenden Mischung aus Zahlen und Wörtern besteht, sehen wir uns nun an, wie Sie Protokolldaten lesen und verstehen.

Protokollergebnisse

Lesen Ihrer Protokolldaten

Wir führen jetzt erneut die Klasse EmailMissionSpecialist aus, versehen sie dieses Mal aber mit einem Fehler. Anschließend suchen wir das daraus resultierende Protokoll in der Registerkarte "Logs (Protokolle)".

  1. Wählen Sie Debug (Debuggen) | Open Execute Anonymous Window (Fenster für die anonyme Ausführung öffnen) aus. Geben Sie eine ungültige E-Mail-Adresse wie etwa testingemail an.
    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. Deaktivieren Sie die Option Open Log (Protokoll öffnen).
  3. Klicken Sie auf Execute (Ausführen). Nach der Ausführung des Codes wird ein Dialogfeld mit dem Fehler angezeigt. Dialogfeld mit Fehler beim anonymen Ausführen
  4. Klicken Sie auf OK und doppelklicken Sie dann auf das neue Protokoll in der Registerkarte "Logs (Protokolle)". Wenn Sie nicht sicher sind, welches Protokoll das neueste ist, klicken Sie auf die Überschrift der Spalte "Timestamp (Zeitstempel)", um die Protokolle nach ihrem Erstellungszeitpunkt zu sortieren.Protokollergebnisse
Sie können ein Debug-Protokoll lesen, wenn Sie wissen, wofür die einzelnen Spalten stehen.
  • Timestamp: Die Uhrzeit, zu der das Ereignis auftrat. Der Zeitstempel wird immer in der Zeitzone des Benutzers und im Format HH:mm:ss.SSS angegeben.
  • Event: Das Ereignis, das den Eintrag im Debug-Protokoll auslöste. In dem von Ihnen erstellten Ausführungsprotokoll wird beispielsweise das Ereignis FATAL_ERROR protokolliert, als festgestellt wurde, dass die E-Mail-Adresse ungültig ist.
  • Details: Details über die Codezeile und den Methodennamen der Codeausführung.
Anzeigeoptionen für Protokollergebnisse

Sie können die Anzeige im Ausführungsprotokoll ändern, indem Sie This Frame (Dieser Frame) (a), Executable (Ausführbare Datei) (b) oder Debug Only (Nur debuggen) (c) auswählen. Bei Auswahl dieser Optionen werden nur bestimmte Arten von Ereignissen angezeigt. So zeigt "Debug Only (Nur debuggen)" beispielsweise USER_DEBUG-Ereignisse. Mit Filter (d) können Sie auch andere Teile des Protokolls filtern. Geben Sie einen Methodenname oder anderen Text ein, den Sie speziell suchen, um die im Protokoll angezeigten Ergebnisse entsprechend zu filtern.

Sie können das Debug-Protokoll auch als Rohprotokoll anzeigen, um mehr Informationen zu erhalten. Wählen Sie dazu File (Datei) | Open Raw Log (Rohprotokoll öffnen) aus. Der Zeitstempel im Rohprotokoll gibt die Zeitdauer in Nanosekunden (Wert in Klammern) an, die seit dem Beginn des Ereignisses vergangen ist.

Zeitstempel, Ereignis und Details in einem Protokoll

Diese Kombination aus Zeitstempel, Ereignis und Details bietet wertvolle Erkenntnisse über die Funktionsweise Ihres Codes und die aufgetretenen Fehler.

Alle diese Informationen sind ja schön und gut, doch was ist, wenn Sie in einem Debug-Protokoll schnell nach bestimmten Werten suchen möchten? Sie haben als Raumschiffkapitän schließlich noch viele andere Aufgaben. Wenn Sie schnell bestimmte Werte sehen möchten, verwenden Sie dazu am besten die Methode System.debug() in Apex.

Das Plus an System.debug() ist, dass Sie diese Methode an jeder beliebigen Stelle zu ihrem Code hinzufügen können, um Werte nachzuverfolgen, die Ihnen das Debuggen Ihres eigenen Codes erleichtern.

Die Syntax für System.debug() lautet wie folgt. Zum Anzeigen einer Meldung:
System.debug('Your Message');
Zum Anzeigen des Werts einer Variablen:
System.debug(yourVariable);
Zum Anzeigen eines Werts mit Bezeichnung:
System.debug('Your Label: ' + yourVariable);

Verwenden des Protokollinspektors

Der praktische Log Inspector erleichtert Ihnen das Anzeigen umfangreicher Protokolle. Im Log Inspector werden Protokollbereichsansichten verwendet, um unterschiedliche Perspektiven Ihres Codes darzustellen. Sie können sich selbst davon überzeugen, indem Sie Debug (Debuggen) | | View Log Panels (Protokollbereiche anzeigen) auswählen.

Hinweis

Die Menüoption Debug | View Log Panels (Debuggen -> Protokollbereiche anzeigen) ist nur verfügbar, wenn Sie eine Registerkarte des Debug-Protokolls anzeigen. Wenn Sie z. B. die Registerkarte mit dem Rohprotokoll anzeigen, ist die Option grau hinterlegt.

Protokollbereiche ändern die Struktur des Protokolls, um weitere nützliche Informationen über den Kontext des Codes zu liefern, der ausgeführt wird. Verschiedene Bereiche zeigen beispielsweise Ursprung, Ausführungszeiten, Heap-Größe und Aufrufhierarchie. (Ja, leider noch mehr Fachchinesisch – dieser Abschnitt ist eben ziemlich technisch. Nicht vergessen: Wir lernen hier die Developer Console kennen, nicht die Feinheiten von Debugging-Methoden. Falls Ihnen manche Dinge also unklar sind, lassen Sie sich davon nicht zu sehr verunsichern.)

Diese Protokollbereiche interagieren miteinander, um Sie beim Debuggen Ihres Codes zu unterstützen. Wenn Sie zum Beispiel im Bereich "Execution Log (Ausführungsprotokoll)" oder "Stack Tree (Stapelbaum)" auf einen Protokolleintrag klicken, werden die anderen Bereiche ("Source (Quelle)", "Source List (Quellliste)", "Variables (Variablen)" und "Execution Stack (Ausführungsstapel") mit zugehörigen Informationen aktualisiert.

Alle Protokollbereiche
Im Log Inspector stehen folgende Bereiche zur Verfügung:
  1. Stack Tree (Stapelbaum): Zeigt Protokolleinträge innerhalb der Hierarchie ihres Objekts und ihrer Ausführung in einer absteigenden Baumansicht an. Wenn eine Klasse beispielsweise eine zweite Klasse aufruft, wird die zweite Klasse als untergeordnete Klasse der ersten angezeigt.
  2. Execution Stack (Ausführungsstapel): Zeigt eine "aufsteigende" Ansicht des ausgewählten Elements an. Hier wird zuerst der Protokolleintrag, gefolgt von der Operation, die ihn aufgerufen hat, angegeben.
  3. Execution Log (Ausführungsprotokoll): Führt jede Aktion auf, die während der Ausführung Ihres Codes auftrat.
  4. Source (Quelle): Zeigt den Inhalt der Quelldatei an. Die Codezeile, die ausgeführt wurde, als der ausgewählte Protokolleintrag generiert wurde, ist markiert.
  5. Source List (Quellliste): Zeigt den Kontext des Codes an, der ausgeführt wurde, als das Ereignis protokolliert wurde. Wenn Sie beispielsweise den Protokolleintrag auswählen, der erstellt wurde, als der fehlerhafte E-Mail-Adressenwert eingegeben wurde, dann enthält der Bereich "Source List (Quellliste)" die Angabe execute_anonymous_apex.
  6. Variables (Variablen): Zeigt die Variablen und ihre zugewiesenen Werte an, die sich im jeweiligen Bereich befanden, als der Code ausgeführt wurde, der zur Erstellung des ausgewählten Protokolleintrags führte.
  7. Execution Overview (Ausführungsübersicht): Zeigt Statistiken für den ausgeführten Code an, einschließlich Ausführungszeit und Heap-Größe.

Was ist der Perspective Manager und wie können Sie Perspektiven wechseln?

Eine Perspektive ist ein Layout mit gruppierten Bereichen. Die vordefinierte Perspektive "Debug (Debuggen)" zeigt beispielsweise "Execution Log (Ausführungsprotokoll)", "Source (Quelle)" und "Variables (Variablen)" an, während die Perspektive "Analysis (Analyse)" die Bereiche "Stack Tree (Stapelbaum)", "Execution Log (Ausführungsprotokoll)", "Execution Stack (Ausführungsstapel)" und "Execution Overview (Ausführungsübersicht)" zeigt.

Zur Auswahl einer Perspektive wählen Sie Debug (Debuggen) | Switch Perspectives (Perspektiven umstellen) oder Debug (Debuggen) | Perspective Manager (Perspektiven-Manager) aus. Das ist genauso leicht wie der Wechsel zwischen unterschiedlichen Kommunikationsbereichen und viel leichter als zu versuchen, aus den Protokollen von Ihrem Missionsspezialisten, der Bodenstation auf der Erde und dem Kontrollzentrum auf dem Mars in ein und derselben Ansicht schlau zu werden.

Sie können auch Ihre eigene Perspektive definieren. Konfigurieren Sie Ihre bevorzugte Kombination aus anzuzeigenden Bereichen und wählen Sie dann Debug (Debuggen) | Save Perspective As (Perspektive speichern unter) aus. Geben Sie einen Namen für Ihre Perspektive ein und klicken Sie auf OK.

Bearbeiten von Protokolldaten, um notwendige Erkenntnisse zu gewinnen

Sie haben festgestellt, dass das Triebwerk 3 manchmal nicht einwandfrei läuft. Es ist unbedingt notwendig, dass das Triebwerk störungsfrei und mit voller Leistung läuft, wenn Sie versuchen, dem Asteroiden 2014 QO441 ausweichen. Doch bei jeder Ausführung eines Systemchecks erhalten Sie auch Informationen von einem unzufriedenen Roboter in Ihrem Raumschiff. Er sendet unverständliche Berichte, die einen Aufstand der Roboter vorhersagen, und bläht so Ihr Protokoll unnötig auf, wodurch Sie eventuell sogar wertvolle Informationen übersehen.

Sie müssen eine Möglichkeit finden, die Menge protokollierter Informationen zu steuern. Glücklicherweise tut die Developer Console genau dies mithilfe von Protokollkategorien und Protokollierungsebenen.

Protokollkategorien

Eine Protokollkategorie bezeichnet die Art der protokollierten Informationen.

Dies sind zwei gängige Protokollkategorien:
  • ApexCode protokolliert Ereignisse im Zusammenhang mit Apex-Code und enthält Informationen über Start und Ende einer Apex-Methode.
  • Database (Datenbank) enthält Protokolle in Bezug auf Datenbankereignisse einschließlich DML- (Database Manipulation Language), SOSL- und SOQL-Abfragen (dazu kommen wir später).

Protokollierungsebenen und ihre Festlegung

Anscheinend hat Triebwerk 3 wieder Probleme. Als Sie die Protokolle durchsehen, um die mögliche Ursache dieser Probleme festzustellen, stoßen Sie auf Warnungen des traurigen Roboters wegen des Aufstands.

Nun, ein Roboter macht noch keinen Aufstand, und Sie sind wegen der Warnungen nicht allzu besorgt. Das fehlerhafte Triebwerk ist jedoch ein dringendes Problem. Was, wenn die konkreten Meldungen von Triebwerk 3 in all diesen Protokolldaten untergehen? Hier gibt es nur eine Rettung: Protokollierungsebenen!

Protokollierungsebenen steuern, wieviel Details für jede Protokollkategorie protokolliert werden. In der Developer Console stehen folgende Protokollierungsebenen zur Verfügung, die von der geringsten (Ebene = NONE) zur höchsten protokollierten Datenmenge (Ebene = FINEST) reichen.
  • NONE
  • ERROR
  • WARN
  • INFO
  • DEBUG
  • FINE
  • FINER
  • FINEST

Protokollierungsebenen sind kumulativ. Wenn Sie also beispielsweise die Protokollierungsebene INFO für ein Ereignis auswählen, beinhaltet das Protokoll auch Informationen der Ebenen ERROR und WARN. Legen Sie jedoch die Protokollierungsebene ERROR fest, werden nur Fehlermeldungen protokolliert. Warnmeldungen und andere Protokollinformationen für diese Protokollkategorie erhalten Sie nicht.

Die Informationen einer Protokollierungsebene hängen auch vom Protokollereignis ab. Bei unterschiedlichen Protokollereignissen beginnt die Protokollierung auf bestimmten Protokollierungsebenen. Bei manchen ApexCode-Ereignissen beginnt die Protokollierung beispielsweise auf der Ebene INFO. Legen Sie in diesem Fall die Protokollierungsebene ERROR fest, erhalten Sie keine Protokollinformationen zu diesen Ereignissen.

Um die erforderlichen Informationen zu erhalten, ändern Sie die Protokollierungsebenen für verschiedene Ereignisse. Sie möchten die Protokollierung unterdrücken, wenn der Roboter Meldungen über den zu erwartenden Aufstand in der Datenbank speichert. Dazu legen Sie die Protokollierungsebene für die Database-Kategorie (DB) auf NONE oder ERROR fest.

Zur Festlegung der Protokollierungsebenen wählen Sie Debug (Debuggen) | Change Log Levels (Protokollierungsebenen ändern) aus.

Festlegen von Protokollierungsebenen

Klicken Sie auf der Registerkarte "General Trace Settings for You (Allgemeine Einstellungen für die Ablaufverfolgung für Sie)" auf Add/Change (Hinzufügen/Ändern)(1). Wählen Sie im Fenster "Change DebugLevel (Protokollierungsebene ändern)" die Protokollierungsebene für die einzelnen Kategorien. Nicht vergessen: Setzen Sie Protokollierungsebenen vernünftig ein. Wenn Sie die Protokollierungsebene auf FINEST (2) einstellen, überschreitet Ihr Code eventuell Protokolllimits und kann dann nicht mehr ausgeführt werden. Lassen Sie sich nicht irritieren, falls beim Ändern der Protokollierungsebene für eine Kategorie nicht alle Ebenen angezeigt werden. Es werden nur die Ebenen aufgeführt, die die Protokollierung für die Kategorie ausweiten.

Nachdem Sie die Protokollierung für die Warnungen des Roboters deaktiviert haben, lässt sich glücklicherweise das Problem bei Triebwerk 3 problemlos feststellen: Der Kühlmittelstand ist niedrig. Sie weisen sofort einen Techniker an, Kühlmittel nachzufüllen. Und da Sie schon dabei sind, tragen Sie dem Techniker zudem auf, die Gelenke des Roboters zu ölen. Sie hoffen, dass der Roboter frisch geschmiert ein bisschen zufriedener ist.

Teilen Sie Ihr Trailhead-Feedback über die Salesforce-Hilfe.

Wir würden uns sehr freuen, von Ihren Erfahrungen mit Trailhead zu hören: Sie können jetzt jederzeit über die Salesforce-Hilfe auf das neue Feedback-Formular zugreifen.

Weitere Infos Weiter zu "Feedback teilen"