Logging

Bei der Entwicklung jeglicher Art von Anwendungen möchten Sie oft Informationen protokollieren, um Fehler während der Entwicklung zu diagnostizieren, um Kundenprobleme zu identifizieren und zu diagnostizieren, und für andere Zwecke.

Apps Script bietet drei verschiedene Mechanismen für die Protokollierung:

  • Das integrierte Apps Script-Ausführungsprotokoll Dieses Log ist einfach und streamt in Echtzeit, bleibt aber nur für kurze Zeit bestehen.

  • Über die Cloud Logging-Oberfläche in der Entwicklerkonsole, die Logs bereitstellt, die nach ihrer Erstellung viele Tage lang erhalten bleiben.

  • Die Error Reporting-Oberfläche in der Developer Console, auf der Fehler erfasst und aufgezeichnet werden, die während der Ausführung des Skripts auftreten.

Diese werden in den folgenden Abschnitten beschrieben. Zusätzlich zu diesen Mechanismen können Sie auch Ihren eigenen Protokollierungscode erstellen, der beispielsweise Informationen in eine Logging-Tabelle oder JDBC-Datenbank schreibt.

Apps Script-Ausführungsprotokoll verwenden

Ein grundlegender Ansatz für die Protokollierung in Apps Script ist die Verwendung des integrierten Ausführungslogs. Klicken Sie oben im Editor auf Ausführungsprotokoll, um diese Logs aufzurufen. Wenn Sie eine Funktion ausführen oder den Debugger verwenden, werden die Logs in Echtzeit gestreamt.

Sie können im integrierten Ausführungslog die Logging-Dienste Logger oder console verwenden.

Diese Logs sind für einfache Prüfungen während der Entwicklung und Fehlerbehebung vorgesehen und bleiben nicht sehr lange gespeichert.

Betrachten Sie zum Beispiel diese Funktion:

utils/logging.gs
/**
 * Logs Google Sheet information.
 * @param {number} rowNumber The spreadsheet row number.
 * @param {string} email The email to send with the row data.
 */
function emailDataRow(rowNumber, email) {
  console.log('Emailing data row ' + rowNumber + ' to ' + email);
  try {
    const sheet = SpreadsheetApp.getActiveSheet();
    const data = sheet.getDataRange().getValues();
    const rowData = data[rowNumber - 1].join(' ');
    console.log('Row ' + rowNumber + ' data: ' + rowData);
    MailApp.sendEmail(email, 'Data in row ' + rowNumber, rowData);
  } catch (err) {
    // TODO (developer) - Handle exception
    console.log('Failed with error %s', err.message);
  }
}

Wenn dieses Skript mit den Eingaben "2" und "john@example.com" ausgeführt wird, werden die folgenden Logs geschrieben:

[16-09-12 13:50:42:193 PDT] Datenzeile 2 per E-Mail an max@beispiel.de senden
[16-09-12 13:50:42:271 PDT] Daten in Zeile 2: Kosten 103,24

Cloud Logging

Apps Script bietet auch teilweisen Zugriff auf den Cloud Logging-Dienst der Google Cloud Platform (GCP). Wenn Sie Logging benötigen, das mehrere Tage andauert oder eine komplexere Logging-Lösung für eine Produktionsumgebung mit mehreren Nutzern benötigen, ist Cloud Logging die bevorzugte Wahl. Informationen zur Datenaufbewahrung sowie weitere Details zu Kontingenten finden Sie unter Kontingente und Limits für Cloud Logging.

Wenn Sie ein größeres Logging-Kontingent benötigen, können Sie eine Google Cloud Platform-Kontingentanfrage einreichen. Dafür benötigen Sie Zugriff auf das Cloud Platform-Projekt, das Ihr Skript verwendet.

Cloud Logging verwenden

Cloud-Logs werden an das Google Cloud-Projekt angehängt, das Ihrem Apps Script zugeordnet ist. Eine vereinfachte Version dieser Logs finden Sie im Apps Script-Dashboard.

Verwenden Sie ein Google Cloud-Standardprojekt mit Ihrem Skriptprojekt, um Cloud Logging und die zugehörigen Funktionen in vollem Umfang zu nutzen. Dadurch können Sie direkt in der GCP Console auf Cloud-Logs zugreifen und haben mehr Anzeige- und Filteroptionen.

Beim Logging ist es ratsam, keine personenbezogenen Daten wie E-Mail-Adressen über den Nutzer aufzuzeichnen. Cloud-Logs werden automatisch mit aktiven Nutzerschlüsseln gekennzeichnet, mit denen Sie die Lognachrichten eines bestimmten Nutzers bei Bedarf finden können.

Mit den Funktionen des Apps Script-Dienstes console können Sie Strings, formatierte Strings und sogar JSON-Objekte protokollieren.

Das folgende Beispiel zeigt, wie Sie mit dem Dienst console Informationen in Cloud Operations protokollieren.

utils/logging.gs
/**
 * Logs the time taken to execute 'myFunction'.
 */
function measuringExecutionTime() {
  // A simple INFO log message, using sprintf() formatting.
  console.info('Timing the %s function (%d arguments)', 'myFunction', 1);

  // Log a JSON object at a DEBUG level. The log is labeled
  // with the message string in the log viewer, and the JSON content
  // is displayed in the expanded log structure under "jsonPayload".
  const parameters = {
    isValid: true,
    content: 'some string',
    timestamp: new Date()
  };
  console.log({message: 'Function Input', initialData: parameters});
  const label = 'myFunction() time'; // Labels the timing log entry.
  console.time(label); // Starts the timer.
  try {
    myFunction(parameters); // Function to time.
  } catch (e) {
    // Logs an ERROR message.
    console.error('myFunction() yielded an error: ' + e);
  }
  console.timeEnd(label); // Stops the timer, logs execution duration.
}

Aktive Nutzerschlüssel

Temporäre aktive Nutzerschlüssel bieten eine bequeme Möglichkeit, einzelne Nutzer in Cloud Log-Einträgen zu erkennen, ohne die Identität dieser Nutzer offenzulegen. Schlüssel gelten pro Skript und ändern sich etwa einmal pro Monat, um die Sicherheit zu erhöhen, falls ein Nutzer einem Entwickler seine Identität preisgibt, z. B. beim Melden eines Problems.

Temporäre aktive Nutzerschlüssel sind Log-IDs wie E-Mail-Adressen aus folgenden Gründen überlegen:

  • Sie müssen Ihrem Logging nichts hinzufügen, da sie bereits vorhanden sind.
  • Es ist keine Nutzerautorisierung erforderlich.
  • Sie schützen die Privatsphäre der Nutzer.

Rufen Sie die Cloud-Logs in der Google Cloud Console auf, um temporäre aktive Nutzerschlüssel in Ihren Cloud-Logeinträgen zu finden. Dies ist nur möglich, wenn Ihr Skriptprojekt ein Google Cloud-Standardprojekt verwendet, auf das Sie Zugriff haben. Nachdem Sie das Google Cloud-Projekt in der Console geöffnet haben, wählen Sie einen Logeintrag aus und maximieren Sie ihn, um metadata > labels > script.googleapis.com/user_key zu sehen.

Sie können den temporären aktiven Nutzerschlüssel auch durch Aufrufen von Session.getTemporaryActiveUserKey() in Ihrem Skript abrufen. Eine Möglichkeit, diese Methode zu verwenden, besteht darin, den Schlüssel für den Nutzer anzuzeigen, während er Ihr Skript ausführt. Dann können Nutzer ihre Schlüssel in das Melden von Problemen aufnehmen, um Ihnen die Identifizierung der relevanten Logs zu erleichtern.

Ausnahme-Logging

Beim Ausnahme-Logging werden unbehandelte Ausnahmen im Code des Skriptprojekts zusammen mit einem Stacktrace an Cloud Logging gesendet.

So rufen Sie Ausnahmeprotokolle auf:

  1. Öffnen Sie das Apps Script-Projekt.
  2. Klicken Sie links auf Ausführungen .
  3. Klicken Sie oben auf Filter hinzufügen > Status.
  4. Klicken Sie die Kästchen Fehlgeschlagen und Zeitüberschreitung an.

Sie können sich die protokollierten Ausnahmen auch in der GCP Console ansehen, wenn Ihr Skriptprojekt ein Google Cloud-Standardprojekt verwendet, auf das Sie Zugriff haben.

Ausnahmeprotokollierung aktivieren

Das Ausnahme-Logging ist für neue Projekte standardmäßig aktiviert. So aktivieren Sie das Ausnahme-Logging für ältere Projekte:

  1. Öffnen Sie das Skriptprojekt.
  2. Klicken Sie links auf Projekteinstellungen .
  3. Klicken Sie auf das Kästchen Log nicht erfasste Ausnahmen in Cloud Operations protokollieren.

Fehlerberichte

Das Ausnahme-Logging ist automatisch in Cloud Error Reporting eingebunden, einem Dienst, der in Ihrem Skript erstellte Fehler zusammenfasst und anzeigt. Sie können Ihre Cloud-Fehlerberichte in der Google Cloud Console ansehen. Wenn Sie aufgefordert werden, Error Reporting einzurichten, hat Ihr Skript noch keine Ausnahmen protokolliert. Abgesehen vom Aktivieren des Ausnahme-Loggings ist keine Einrichtung erforderlich.

Logging-Anforderungen

Für die Verwendung des integrierten Ausführungsprotokolls müssen keine Voraussetzungen erfüllt sein.

Eine vereinfachte Version der Cloud-Logs finden Sie im Apps Script-Dashboard. Damit Sie Cloud Logging und die Fehlerberichte optimal nutzen können, müssen Sie jedoch Zugriff auf das GCP-Projekt des Skripts haben. Dies ist nur möglich, wenn Ihr Skriptprojekt ein Google Cloud-Standardprojekt verwendet.