Formatierungsfehler in Stackdriver Logging

Wenn Sie Fehler aus App Engine, Kubernetes Engine oder Compute Engine protokollieren, muss der Logeintrag die vollständige Fehlermeldung und den Stacktrace enthalten. Er sollte mehrzeilig als textPayload oder im Feld message von jsonPayload protokolliert werden (siehe LogEntry-Referenz).

Wenn Sie Fehlerdaten über die report-API senden oder benutzerdefinierte Logs nutzen, müssen Sie die folgende JSON-Struktur verwenden.

JSON-Darstellung

{
  "eventTime": string,
  "serviceContext": {
    "service": string,     // Required.
    "version": string
  },
  "message": string,       // Required. Should contain the full exception
                           // message, including the stack trace.
  "context": {
    "httpRequest": {
      "method": string,
      "url": string,
      "userAgent": string,
      "referrer": string,
      "responseStatusCode": number,
      "remoteIp": string
    },
    "user": string,
    "reportLocation": {    // Required if no stack trace in 'message'.
      "filePath": string,
      "lineNumber": number,
      "functionName": string
    }
  }
}

Beispiele

Die folgenden Nutzlasten werden von Error Reporting korrekt verarbeitet, wenn sie an die report-API gesendet oder in LogEntry.jsonPayload protokolliert werden:

Nutzlast mit message, die einen Stacktrace enthält:

{
  "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"
  }
}

Nutzlast mit message ohne ein Stacktrace. reportLocation ist erforderlich:

{
  "serviceContext": {"service": "worker"},
  "message": "Cannot process job: Missing attribute 'userId'",
  "context": {
    "reportLocation": {
      "filePath": "cleanup.js",
      "lineNumber": 42,
      "functionName": "processJob"
    }
  }
}

Weitere Befehle für die Fehlerbehebung finden Sie auf der Seite zur Fehlerbehebung.

Felder

Feldname Typ Beschreibung Hinweise
eventTime string

Gibt an, wann der Fehler gemäß dem Fehlerbericht auftrat. Wenn der Bericht keinen Zeitstempel hat, wird der Zeitpunkt verwendet, zu dem der Fehler von Error Reporting erfasst wurde.

Ein Zeitstempel im Format "RFC3339 UTC 'Zulu'" in Nanosekunden. Beispiel: "2014-10-02T15:01:23.045123456Z".

Optional
serviceContext object Gibt an, in welchem Dienstkontext der Fehler gemeldet wurde. Erforderlich
serviceContext.service string

Eine Bezeichnung für den Dienst, z. B. Name des ausführbaren Jobs oder Google App Engine-Dienstname. Dieses Feld enthält erwartungsgemäß eine geringe Anzahl an Werten, die im Verlauf der Zeit stabil sind. Im Gegensatz zu version – dieser Wert kann sich ändern, sobald neuer Code bereitgestellt wird.

Erforderlich
serviceContext.version string Gibt an, welche Quellcodeversion der Entwickler bereitgestellt hat, z. B. ein Versionslabel oder ein Git-SHA-1-Hash. Wenn der Entwickler keine Version angegeben hat, wird der Wert auf default festgesetzt. Für die App Engine-Standardumgebung ist der Wert auf die App-Version festgelegt. Optional
message string Die Fehlermeldung.
Wenn kein "context.reportLocation" angegeben wird, muss die Meldung einen Header (normalerweise der Name des Ausnahmetyps und eine Fehlermeldung) und einen Ausnahme-Stacktrace in einer der unterstützten Programmiersprachen und -formate enthalten.
Unterstützte Sprachen sind Java, Python, JavaScript, Ruby, C#, PHP und Go.
Unterstützte Stacktrace-Formate:
Erforderlich
context object Gibt an, in welchem Kontext der Fehler auftrat. Optional
context.httpRequest object Die verarbeitete HTTP-Anfrage, als der Fehler ausgelöst wurde. Optional
context.httpRequest.method string Die Art der HTTP-Anfrage, wie GET, POST usw. Optional
context.httpRequest.url string Die URL der Anfrage. Optional
context.httpRequest.userAgent string Informationen zum User-Agent für die Anfrage. Optional
context.httpRequest.referrer string Die Verweisinformationen für die Anfrage. Optional
context.httpRequest.responseStatusCode number Der HTTP-Antwortstatus für die Anfrage. Optional
context.httpRequest.remoteIp string Die IP-Adresse, von der die Anfrage stammt, z. B. IPv4, IPv6 oder ein Token, das von der IP-Adresse abgeleitet wird. Dies ist abhängig von den Daten, die im Fehlerbericht angegeben werden. Optional
context.user string Der Nutzer, der den Absturz ausgelöst hat oder davon betroffen war. Dies kann eine User ID, eine E-Mail-Adresse oder ein beliebiges Token sein, das den Nutzer eindeutig identifiziert. Dieses Feld frei lassen, wenn Sie einen Fehlerbericht senden und der Nutzer nicht eingeloggt war. In diesem Fall verwendet das Error Reporting-System andere Daten, wie die Remote-IP-Adresse, um betroffene Nutzer zu unterscheiden. Siehe affected_users_count in ErrorGroupStats. Optional
context.reportLocation object Die Stelle im Quellcode, an der entschieden wurde, dass der Fehler gemeldet wird – in der Regel dort, wo der Fehler protokolliert wurde. Für eine protokollierte Ausnahme ist dies die Quellzeile, in der die Ausnahme protokolliert ist – in der Regel dort, wo der Fehler erfasst wurde. Optional
context.reportLocation.filePath string Der Dateiname des Quellcodes. Dieser kann einen verkürzten relativen Pfad oder einen vollständigen Pfad von einem Produktionsgerät enthalten. Optional
context.reportLocation.lineNumber number Basierend auf 1. 0 gibt an, dass die Zeilennummer unbekannt ist. Optional
context.reportLocation.functionName string Der für Menschen lesbare Name einer Funktion oder Methode. Dieser Wert kann optionalen Kontext wie die Klasse oder den Paketnamen enthalten. Beispiel: my.package.MyClass.method für Java. Optional
Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...

Stackdriver Error Reporting-Dokumentation