In diesem Dokument wird erläutert, wie Sie den Logeintrag formatieren, wenn Sie Cloud Logging zum Melden von Fehlerereignissen verwenden möchten.
Sie können Fehlerereignisse an Ihr Google Cloud-Projekt melden, indem Sie die Cloud Logging API-Methode write
oder die Error Reporting API-Methode report
ausführen.
Wenn Sie Fehlerereignisse über die Cloud Logging API melden, enthält der Anfragetext ein LogEntry
-Objekt, das einen Stacktrace enthalten muss, oder ein ReportedErrorEvent
-Objekt.
Hinweise
Folgen Sie der Einrichtungsanleitung für Ihre Sprache und Plattform.
Wenn eine Authentifizierung auf API-Schlüsselbasis erforderlich ist, müssen Sie die Error Reporting API verwenden. Wenn Sie ein Fehlerereignis mithilfe der Error Reporting API melden möchten, führen Sie die Methode
report
aus und formatieren Sie den Anfragetext der Methode alsReportedErrorEvent
-Objekt.Wenn Sie die Error Reporting API verwenden, werden Logeinträge mit korrekt formatierten Fehlermeldungen automatisch generiert und in Cloud Logging geschrieben. Diese Logeinträge werden in ein Log geschrieben, dessen
logName
so formatiert ist:projects/PROJECT_ID/clouderrorreporting.googleapis.com%2Freported_errors
Da Logeinträge durch Aufrufe von
report
generiert werden, können Kosten für die Cloud Logging-Aufnahme anfallen. Unter Ausschlussfilter können Sie festlegen, welche Logs aufgenommen werden.Wenn Sie Fehlerereignisse mithilfe der Error Reporting API melden, gilt der Rest dieses Dokuments nicht.
Formatanforderungen für LogEntry
In diesem Abschnitt wird beschrieben, wie ein LogEntry
formatiert wird, damit Error Reporting das im Logeintrag enthaltene Fehlerereignis erfasst.
Stacktrace protokollieren
Wenn Sie ein Fehlerereignis protokollieren möchten, das ein Stacktrace ist, schreiben Sie das Fehlerereignis in einen der folgenden Typen:
- Ein mehrzeiliges
textPayload
. Ein
jsonPayload
mit dem Feldmessage
,stack_trace
oderexception
.Sie können mehrere dieser Felder angeben. Wenn mehr als eines dieser Felder angegeben ist, lautet die Reihenfolge der Auswertung:
stack_trace
, dannexception
und dannmessage
.Wenn das Fehlerereignis als
ReportedErrorEvent
-Objekt formatiert ist, kopieren Sie die zugehörigen Felder injsonPayload
. Weitere Informationen und ein Beispiel finden Sie unter Einen Fehler protokollieren, der alsReportedErrorEvent
-Objekt formatiert ist.Ein
jsonPayload
, der kein Feldmessage
,stack_trace
oderexception
, aber einen Stacktrace enthält.Error Reporting durchsucht alle Felder in einem
jsonPayload
nach Stacktraces. Wenn mehr als ein Stacktrace gefunden wird, wird ein Stacktrace ausgewählt. Der Auswahlalgorithmus sorgt für eine konsistente Auswahl.
SMS protokollieren
Wenn Sie ein Fehlerereignis protokollieren möchten, bei dem es sich um eine Textnachricht handelt, verwenden Sie das folgende Format für jsonPayload
:
"jsonPayload": { "@type": "type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent", "message": "Text message" },
Wenn Sie das Feld @type
auf den angegebenen Wert setzen, wertet Error Reporting den Logeintrag immer so aus, als wären alle Pflichtfelder vorhanden. Daher erfasst
Error Reporting die Fehlerereignisse.
Wenn Sie das Feld @type
auf einen anderen Wert festlegen oder nicht konfigurieren, sucht Cloud Logging nach dem Feld serviceContext
, um festzustellen, ob die Nutzlast ein ReportedErrorEvent
-Objekt ist.
Sie müssen das Feld @type
nicht festlegen, wenn die Felder message
, stack_trace
oder exception
von jsonPayload
einen Stacktrace enthalten.
In diesen Fällen erfasst Error Reporting das Fehlerereignis automatisch.
Unterstützte überwachte Ressourcen
Legen Sie für das Feld resource
des Objekts LogEntry
einen der folgenden unterstützten überwachten Ressourcentypen fest:
app_script_function
aws_ec2_instance
cloud_function
cloud_run_jobs
cloud_run_revision
consumed_api
container
dataflow_step
gae_app
gce_instance
k8s_container
k8s_pod
ml_job
1workflows.googleapis.com/Workflow
global
1
1 textPayload
wird nicht unterstützt
Beispiele
In diesem Abschnitt wird gezeigt, wie Sie dafür sorgen können, dass Error Reporting einen Logeintrag verarbeitet, wenn dieser Logeintrag eine Textnachricht oder einen Stacktrace enthält.
Fehlerereignis protokollieren, bei dem es sich um eine Textnachricht handelt
Das folgende Beispiel zeigt, wie Sie ein LogEntry
-Objekt formatieren, wenn Sie ein Fehlerereignis protokollieren möchten, bei dem es sich um eine Textnachricht handelt. Verwenden Sie die folgende JSON-Struktur für das Feld jsonPayload
der Datei LogEntry
:
{... { "jsonPayload": { "@type": "type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent", "message": "A simple text message" }, "logName": "projects/test-project/logs/reported-error", "resource": { "labels": { "project_id": "test-project" }, "type": "global" }, "severity": "ERROR", "timestamp": "2019-06-27T13:43:26.375834551Z" } }
Wie das Beispiel zeigt, müssen Sie das Feld @type
auf den Wert setzen, der Error Reporting dazu zwingt, den Logeintrag zu gruppieren: Weitere Informationen finden Sie unter Textnachricht protokollieren.
Wenn das Feld message
einen Stacktrace enthält, wird der Logeintrag automatisch gruppiert, sodass Sie das Feld @type
nicht angeben müssen.
Es wird ein Fehler protokolliert, der als ReportedErrorEvent
-Objekt formatiert ist
Wenn das Fehlerereignis in einem ReportedErrorEvent
-Objekt gespeichert wird, verwenden Sie die folgende JSON-Struktur für das Feld jsonPayload
von LogEntry
:
{ "eventTime": string, "serviceContext": { "service": string, // Required. "version": string }, "message": string, // Required. This field contains the main error content to report. "@type": string // Optional. For information about this field, see Log a text message. "context": { "httpRequest": { "method": string, "url": string, "userAgent": string, "referrer": string, "responseStatusCode": number, "remoteIp": string }, "user": string, "reportLocation": { // Required if no stack trace is provided. "filePath": string, "lineNumber": number, "functionName": string } } }
Füllen Sie das Feld message
unbedingt mit den Fehlerinformationen aus.
Informationen zum Speichern eines Stacktrace im Feld message
eines ReportedErrorEvent
-Objekts finden Sie auf der Referenzseite für die Methode report
.
Das folgende Beispiel zeigt, wie das Feld jsonPayload
der LogEntry
so festgelegt wird, dass es als ReportedErrorEvent
-Objekt formatiert wird.
Da das Feld message
einen Stacktrace enthält, wird das Fehlerereignis nach Error Reporting gruppiert:
{... "jsonPayload": { "serviceContext": { "service": "frontend", "version": "bf6b5b09b9d3da92c7bf964ab1664fe751104517" }, "message": "com.example.shop.Template$CartDiv retrieveCart: Error\njava.lang.IndexOutOfBoundsException: Index: 4, Size: 4\n\tat java.util.ArrayList.rangeCheck(ArrayList.java:635)\n\tat java.util.ArrayList.get(ArrayList.java:411)\n\tat com.example.shop.Cart.retrieve(Cart.java:76)\n\tat com.example.shop.Cart.generate(Cart.java:55)\n\tat com.example.shop.Template$CartDiv.retrieveCart(Template.java:113)\n\tat com.example.shop.Template.generate(Template.java:22)\n\tat com.example.shop.CartServlet.doGet(CartServlet.java:115)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:717)\n", "context": "httpRequest": { "method": "GET", "url": "http://example.com/shop/cart", "responseStatusCode": 500 }, "user": "9f32f587135aa6774e78ed30fbaabcce3ec5528f" } }, "logName": "projects/test-project/logs/reported-error", "resource": { "labels": { "project_id": "test-project" }, "type": "global" }, "severity": "ERROR", "timestamp": "2019-06-27T13:43:26.375834551Z" }
Im Feld textPayload
ein Fehlerereignis protokollieren
Sie können ein Fehlerereignis aufzeichnen, indem Sie das Feld textPayload
einer LogEntry
verwenden, um die Fehlerdaten zu speichern. Der folgende Google Cloud CLI-Befehl führt beispielsweise zu einem Logeintrag mit der Wichtigkeitsstufe ERROR
und dessen Feld textPayload
ein Fehlerereignis enthält:
gcloud logging write test-log --severity=ERROR --payload-type=text 'RuntimeException: Oops! Something bad happened. at com.example.MyClass.method(MyClass.java:123) at com.example.OtherClass.doStuff(Unknown Source) at com.example.Sys.create(Native Method)'
Das Ergebnis des vorherigen Befehls ist ein Logeintrag, der nach Error Reporting gruppiert wird:
{... logName: "projects/PROJECT_ID/logs/test-log" severity: "ERROR" textPayload: "RuntimeException: Oops! Something bad happened. at com.example.MyClass.method(MyClass.java:123) at com.example.OtherClass.doStuff(Unknown Source) at com.example.Sys.create(Native Method)" ... }