Cette page a été traduite par l'API Cloud Translation.
Switch to English

Formater les erreurs dans les journaux

Cette page décrit le format des entrées de journal requis pour signaler les événements associés à des erreurs à l'aide de Cloud Logging.

Avant de commencer

Si vous utilisez l'API Error Reporting, vous pouvez signaler les événements associés à des erreurs à votre application en les écrivant dans ReportedErrorEvent. Cela permet de générer des entrées de journal avec des messages d'erreur correctement formatés dans Cloud Logging. L'entrée logName correspondante se présente comme suit :

  projects/<PROJECT_ID>/clouderrorreporting.googleapis.com%2Freported_errors

Cette méthode peut entraîner des coûts d'ingestion Cloud Logging. Pour contrôler ces coûts, consultez la page Exclusion de journaux.

Si vous préférez signaler des événements associés à des erreurs à l'aide de Cloud Logging, consultez les sections suivantes.

Exigences concernant la mise en forme

Les entrées de journal dans Cloud Logging contenant des traces de pile ou des exceptions, ou dont le format est ReportedErrorEvent, génèrent des erreurs dans Error Reporting.

Les données d'erreur doivent être consignées dans le champ d'union payload de type LogEntry de l'une des manières suivantes :

  • Champ textPayload multiligne
  • Champ message de jsonPayload

Vous devez également suivre les instructions de configuration applicables à votre langage et à votre plate-forme. Lorsque vous consignez des données d'erreur depuis les environnements App Engine, Compute Engine et Google Kubernetes Engine, la seule condition de mise en forme requise est que l'entrée de journal contienne le message d'exception complet et la trace de la pile.

Pour en savoir plus sur la mise en forme du message d'exception et de la trace de pile, consultez la section ReportedErrorEvent de la page de référence sur report dans Error Reporting.

Spécifier @type

Si votre entrée de journal contient le champ @type de type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent, Error Reporting évalue l'entrée de journal comme si tous les champs obligatoires étaient présents et enregistre l'événement associé à des erreurs.

Représentation JSON

Lorsque vous envoyez des données d'erreur à l'aide de Cloud Logging, l'objet ReportedErrorEvent que vous fournissez doit respecter la structure JSON suivante :

    {
      "eventTime": string,
      "serviceContext": {
        "service": string,     // Required.
        "version": string
      },
      "message": string,       // Required. Should contain the full exception
                               // message, including the stack trace.
      "@type": string          // Optional.  Review "Specifying @type" section above.
      "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
        }
      }
    }

Types de ressources surveillées compatibles

Lorsque vous consignez des données à l'aide de la structure LogEntry, le champ resource doit être défini sur l'un des types de ressources surveillés suivants :

  • app_script_function
  • aws_ec2_instance
  • cloud_function
  • cloud_run_revision
  • consumed_api
  • container
  • dataflow_step
  • gae_app
  • gce_instance
  • k8s_container
  • ml_job1
  • global1

1 Champ textPayload non compatible

Exemples de mise en forme des entrées de journal

Les exemples suivants présentent des entrées de journal correctement traitées par Error Reporting si elles sont consignées dans LogEntry.jsonPayload.

Cette entrée de journal est regroupée, car @type est correctement spécifié :

{...
  {
    "jsonPayload": {
      "@type": "type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent",
      "message": "An error message without stacktrace or exception"
    },
    "logName": "projects/test-project/logs/reported-error",
    "resource": {
      "labels": {
        "project_id": "test-project"
      },
      "type": "global"
    },
    "severity": "ERROR",
    "timestamp": "2019-06-27T13:43:26.375834551Z"
  }
}

Le message de la charge utile de cette entrée de journal contient une trace de pile et une exception. L'entrée est donc également regroupée par Error Reporting :

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

Pour en savoir plus sur les champs utilisés dans une instance de ReportedErrorEvent, consultez la documentation correspondante.