Aufgabenlogs schreiben

In diesem Dokument wird beschrieben, wie Sie Aufgabenlogs schreiben und einen Batchjob mit Aufgabenlogs erstellen und ausführen.

Wenn das Logging für einen Job aktiviert ist, werden Aufgabenlogs aus Meldungen generiert, die die Runnables des Jobs während der Laufzeit ausgeben. Wenn Sie Ihre Runnables zum Schreiben von Aufgabenlogs konfigurieren, können Sie benutzerdefinierte Informationen in Cloud Logging bereitstellen, wodurch die Analyse und Fehlerbehebung Ihrer Jobs einfacher wird. Weitere Informationen zu Logs finden Sie unter Job mithilfe von Logs analysieren.

Hinweise

Job mit Aufgabenlogs erstellen und ausführen

Gehen Sie beim Erstellen des Jobs so vor, um einen Job zu erstellen und auszuführen, der Aufgabenlogs erhalten soll:

  1. Aktivieren Sie Logs für den Job. Dadurch können alle für den Job geschriebenen Logs generiert werden.
  2. Fügen Sie für jedes Aufgabenlog, das der Job haben soll, einen Befehl hinzu, der ein Aufgabenlog in ein Runnable schreibt. Wenn der Job ausgeführt wird, wird jedes Mal ein Aufgabenlog generiert, wenn ein Befehl zum Schreiben eines Aufgabenlogs ausgeführt wird.

    Informationen zum Schreiben von Aufgabenlogs finden Sie in diesem Dokument unter Aufgabenlogs schreiben.

Aufgabenlogs schreiben

Ein Tasklog wird für alle Inhalte geschrieben, die die Runnables eines Jobs während der Laufzeit in den Standardausgabestream (stdout) oder Standardfehlerstream (stderr) ausgeben. Aufgabenlogs können beispielsweise mit dem Befehl echo geschrieben werden. Die Struktur des resultierenden Aufgabenlogs variiert je nachdem, wie Sie den gedruckten Inhalt formatiert haben. Insbesondere können Sie jedes Aufgabenlog mit einer der folgenden Optionen schreiben:

Durch Ausgabe eines Strings ein unstrukturiertes Log schreiben

Mit unstrukturierten Logs können Sie eine Nachricht definieren. Dabei handelt es sich um einen String, der im Feld textPayload des Logs angezeigt wird.

Wenn Sie ein unstrukturiertes Log schreiben möchten, geben Sie einen unformatierten String aus, wie in den folgenden Abschnitten gezeigt.

Beispiel für ein unstrukturiertes Log

Angenommen, Sie benötigen ein Aufgabenlog, das den folgenden String enthält:

MESSAGE

Wenn Sie diesen Beispielstring ausgeben, erhalten Sie ein Aufgabenprotokoll, das in etwa so aussieht:

insertId: ...
labels: ...
logName: projects/PROJECT_ID/logs/batch_task_logs
receiveTimestamp: ...
resource: ...
severity: INFO
textPayload: MESSAGE
timestamp: ...

Ersetzen Sie Folgendes:

  • MESSAGE: die Nachricht. Dabei handelt es sich um einen String, der den Zweck des Aufgabenlogs zusammenfasst, z. B. The summary for a task log..
  • PROJECT_ID: die Projekt-ID Ihres Projekts.

Sie können einen String mit verschiedenen Methoden ausgeben, z. B. indem Sie den folgenden echo-Befehl in ein Runnable aufnehmen:

echo MESSAGE

Umfassende Beispiele für Jobs, bei denen der Befehl echo zum Schreiben unstrukturierter Aufgabenlogs verwendet wird, finden Sie unter Einfachen Job erstellen und ausführen.

Strukturiertes Log durch Drucken eines JSON-Objekts schreiben

In strukturierten Logs können Sie Folgendes definieren:

Wenn Sie ein strukturiertes Log schreiben möchten, geben Sie ein JSON-Objekt aus. In den folgenden Abschnitten wird gezeigt, wie Sie ein Log mit einigen Standardfeldern und benutzerdefinierten Feldern definieren. Informationen zum Definieren eines Logs mit benutzerdefinierten Statusereignissen finden Sie unter Benutzerdefinierte Statusereignisse konfigurieren.

Beispiel für ein strukturiertes Protokoll

Angenommen, Sie möchten ein Aufgabenlog, das die Informationen im folgenden JSON-Objekt enthält, das eine Nachricht, einen Schweregrad und zwei benutzerdefinierte Felder definiert.

{
  "message": "MESSAGE"
  "severity": "SEVERITY"
  "CUSTOM_FIELD_1": CUSTOM_VALUE_1
  "CUSTOM_FIELD_2": CUSTOM_VALUE_2
}

Wenn Sie dieses JSON-Objekt ausgeben, erhalten Sie ein Aufgabenprotokoll, das in etwa so aussieht:

insertId: ...
jsonPayload:
  "CUSTOM_FIELD_1": CUSTOM_VALUE_1
  "CUSTOM_FIELD_2": CUSTOM_VALUE_2
  message: MESSAGE
labels: ...
logName: projects/PROJECT_ID/logs/batch_task_logs
receiveTimestamp: ...
resource: ...
severity: SEVERITY
timestamp: ...

Ersetzen Sie Folgendes:

  • MESSAGE: die Nachricht. Dabei handelt es sich um einen String, der den Zweck des Aufgabenlogs zusammenfasst, z. B. The summary for a task log..
  • SEVERITY: Der Schweregrad des Logs, den Sie als Filter verwenden können, wenn Sie Logs für einen Job ansehen. Der Schweregrad muss einer der LogSeverity-Enums sein, die in einen String umgewandelt wurden, in dem nur der erste Buchstabe großgeschrieben wird. Geben Sie beispielsweise für die Aufzählung ERROR den Wert Error an.
  • CUSTOM_FIELD_1 und CUSTOM_FIELD_2: die Namen der benutzerdefinierten Felder für das Aufgabenlog, z. B. custom_field_1 und custom_field_2.
  • CUSTOM_VALUE_1 und CUSTOM_VALUE_2: die Werte benutzerdefinierter Felder für das Aufgabenlog. Dabei kann es sich um verschiedene Datentypen handeln und Anführungszeichen erforderlich sind, z. B. "the first custom field" und 2.
  • PROJECT_ID: die Projekt-ID Ihres Projekts.

Sie können dieses JSON-Beispielobjekt mit verschiedenen Methoden ausgeben. Die folgenden Beispiele veranschaulichen einige der möglichen Methoden zum Drucken des JSON-Beispielobjekts:

  • Geben Sie mit dem Befehl echo einen entsprechenden String aus.
  • Ein äquivalentes Wörterbuch mit Python ausgeben.

Echo-Befehl

Wenn Sie das JSON-Beispielobjekt mit dem Befehl echo und einem entsprechenden String ausgeben möchten, fügen Sie den folgenden Befehl in ein Runnable ein:

echo '{\"message\":\"MESSAGE\", \"severity\":\"SEVERITY\", \"CUSTOM_FIELD_1\":CUSTOM_VALUE_1, \"CUSTOM_FIELD_2\":CUSTOM_VALUE_2}'

Angenommen, Sie erstellen einen Job mit der folgenden ausführbaren Datei und führen ihn aus:

"script": {
  "text": "echo '{\"message\":\"The message for a structured log.\", \"severity\":\"Error\", \"custom_field_1\":\"the first custom field\", \"custom_field_2\":2}'"
}

Dann sieht das resultierende Aufgabenprotokoll in etwa so aus:

insertId: ...
jsonPayload:
  custom_field_1: the first custom field
  custom_field_2: 2
  message: The summary for a structured task log with error severity.
labels: ...
logName: projects/PROJECT_ID/logs/batch_task_logs
receiveTimestamp: ...
resource: ...
severity: ERROR
timestamp: ...

Python

Wenn Sie das JSON-Beispielobjekt mit Python und einem entsprechenden Wörterbuch ausgeben möchten, fügen Sie das folgende Beispiel in ein ausführbares Objekt ein:

#!/usr/bin/env python3

import json

entry = dict(
    severity="SEVERITY",
    message="MESSAGE",
    CUSTOM_FIELD_1=CUSTOM_VALUE_1,
    CUSTOM_FIELD_2=CUSTOM_VALUE_2,
)
print(json.dumps(entry))

Angenommen, Sie erstellen einen Job mit der folgenden ausführbaren Datei und führen ihn aus:

"script": {
  "text": "#!/usr/bin/env python3\n\nimport json\n\nentry = dict(\nseverity=\"Error\",\nmessage=\"The summary for a structured task log with error severity.\",\ncustom_field_1=\"the first custom field\",\ncustom_field_2=2,\n)\nprint(json.dumps(entry))"
}

Dann sieht das resultierende Aufgabenprotokoll in etwa so aus:

insertId: ...
jsonPayload:
  custom_field_1: the first custom field
  custom_field_2: 2
  message: The summary for a structured task log with error severity.
labels: ...
logName: projects/PROJECT_ID/logs/batch_task_logs
receiveTimestamp: ...
resource: ...
severity: ERROR
timestamp: ...

Nächste Schritte