In diesem Dokument wird erläutert, wie Sie den Logeintrag formatieren, wenn Sie ihn verwenden möchten. Cloud Logging zum Melden von Fehlerereignissen.
Sie können Fehlerereignisse an Ihr Google Cloud-Projekt melden, indem Sie
Ausführen der Cloud Logging API-Methode
write
oder der Error Reporting API-Methode,
report
Wenn Sie Fehlerereignisse mit der Cloud Logging API melden, enthält der Anfragetext ein LogEntry
-Objekt mit einem Stack-Trace oder ein ReportedErrorEvent
-Objekt.
Hinweise
Folgen Sie der Einrichtungsanleitung für Ihrer Sprache und Plattform.
Wenn Sie eine API-Schlüssel-basierte Authentifizierung benötigen, müssen Sie den Error Reporting API. Wenn Sie ein Fehlerereignis mit 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, entstehen möglicherweise Aufnahmekosten für Cloud Logging. Informationen dazu, welche Protokolle aufgenommen werden, finden Sie unter Ausschlussfilter.Wenn Sie Fehlerereignisse mit der Error Reporting API melden, gilt der Rest dieses Dokuments nicht.
LogEntry
-Formatanforderungen
In diesem Abschnitt wird beschrieben, wie Sie ein LogEntry
so formatieren, dass es
In Error Reporting wird das auftretende Fehlerereignis erfasst.
im Logeintrag ein.
Stacktrace protokollieren
Wenn Sie ein Fehlerereignis protokollieren möchten, das einen Stacktrace enthält, müssen Sie das Ereignis als einen der folgenden Typen schreiben:
- Ein mehrzeiliges
textPayload
-Element. Ein
jsonPayload
, dasmessage
,stack_trace
oderexception
enthält ein.Sie können mehrere dieser Felder angeben. Wenn Sie mehrere dieser Felder angeben, wird in der folgenden Reihenfolge ausgewertet:
stack_trace
, dannexception
und dannmessage
.Wenn das Fehlerereignis als
ReportedErrorEvent
-Objekt formatiert ist, kopieren Sie die Felder in dasjsonPayload
. Weitere Informationen und ein Beispiel finden Sie unter Fehler protokollieren, der alsReportedErrorEvent
-Objekt formatiert ist.Ein
jsonPayload
, das kein Feldmessage
,stack_trace
oderexception
enthält, aber einen Stack-Trace.Error Reporting durchsucht alle Felder einer
jsonPayload
nach Stacktraces. Wenn mehr als ein Stack-Trace gefunden wird, wird einer ausgewählt. Der Auswahlalgorithmus sorgt für eine einheitliche Auswahl.
SMS protokollieren
Um ein Fehlerereignis in Form einer Textnachricht zu protokollieren, verwenden Sie das folgende Format für die
jsonPayload
:
"jsonPayload": { "@type": "type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent", "message": "Text message" },
Wenn Sie das Feld @type
auf den angegebenen Wert festlegen, wertet Error Reporting den Logeintrag immer so aus, als ob alle erforderlichen Felder vorhanden sind. Daher
In Error Reporting wird das Fehlerereignis erfasst.
Wenn Sie das Feld @type
auf einen anderen Wert setzen oder es nicht konfigurieren,
dann Cloud Logging
nach dem Feld serviceContext
, um zu ermitteln, ob die Nutzlast
Ein ReportedErrorEvent
-Objekt.
Sie müssen das Feld @type
nicht festlegen, wenn message
, stack_trace
,
oder exception
von jsonPayload
einen Stacktrace enthalten.
In diesen Fällen wird das Fehlerereignis automatisch von Error Reporting erfasst.
Unterstützte überwachte Ressourcen
Legen Sie das Feld resource
des Objekts LogEntry
fest.
auf eines der folgenden unterstützten
überwachte Ressourcentypen:
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 erfahren Sie, wie Sie dafür sorgen können, dass ein Logeintrag von der Fehlermeldung verarbeitet wird, wenn er eine Textnachricht oder einen Stack-Trace enthält.
Fehlerereignis in Textnachricht protokollieren
Das folgende Beispiel zeigt, wie ein LogEntry
-Objekt formatiert wird, wenn Sie
ein Fehlerereignis protokollieren möchten, bei dem es sich um eine Textnachricht handelt, verwenden Sie
JSON-Struktur für das Feld jsonPayload
von 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 festlegen, der die Fehlermeldung dazu zwingt, den Logeintrag zu gruppieren: Weitere Informationen finden Sie unter SMS protokollieren.
Wenn das Feld message
einen Stacktrace enthält, wird der Logeintrag
automatisch gruppiert, sodass Sie das Feld @type
nicht angeben müssen.
Fehler protokollieren, der als ReportedErrorEvent
-Objekt formatiert ist
Wenn das Fehlerereignis in einem ReportedErrorEvent
gespeichert wird
-Objekt enthält, 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 } } }
Geben Sie die Fehlerinformationen in das Feld message
ein.
Informationen zum Speichern eines Stack-Traces im Feld message
eines ReportedErrorEvent
-Objekts finden Sie auf der Referenzseite der Methode report
.
Im folgenden Beispiel wird gezeigt, wie das Feld jsonPayload
des Elements LogEntry
so formatiert wird, dass es als ReportedErrorEvent
-Objekt angezeigt wird.
Da das Feld message
einen Stacktrace enthält, wird das Fehlerereignis von 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" }
Fehlerereignisse mit dem Feld textPayload
erfassen
Mit dem Feld textPayload
einer LogEntry
können Sie ein Fehlerereignis erfassen.
um die Fehlerdaten zu speichern. Beispiel:
führt der folgende Google Cloud CLI-Befehl zu einem Logeintrag,
Schweregrad ist ERROR
und dessen Feld textPayload
enthält
Fehlerereignis:
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 Fehlermeldungen gruppiert ist:
{... 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)" ... }