Errores de formato de los registros

En esta página se explica el formato de entrada de registro necesario para usar Cloud Logging a fin de informar sobre eventos de errores.

Antes de comenzar

Si usas la API de Error Reporting, puedes informar sobre los eventos de errores desde la aplicación si los escribes en ReportedErrorEvent. Cuando haces esto, se generan entradas de registro con mensajes de error con el formato correcto en Cloud Logging. La logName resultante se formatea de la siguiente manera:

      projects/project_id/clouderrorreporting.googleapis.com%2Freported_errors

Es posible que generes costos de transferencia de Cloud Logging con este método. Para controlar la transferencia, consulta Descripción general del enrutamiento y el almacenamiento: Filtros de exclusión.

Si prefieres usar Cloud Logging para informar eventos de errores, consulta las siguientes secciones.

Requisitos de formato

Las entradas de registro en Logging que contienen seguimientos de pila o excepciones, o que tienen el formato ReportedErrorEvent, generan errores en Error Reporting.

Los datos de errores se deben registrar en el campo de unión LogEntry payload como uno de estos tipos:

  • Una línea múltiple textPayload
  • El campo message de jsonPayload

Si la entrada de registro especifica @type, el campo payload podría contener solo un mensaje de texto simple, en lugar de datos de error complejos.

También debes seguir las instrucciones de configuración para tu lenguaje y plataforma. Cuando registras datos de errores de App Engine, Compute Engine y Google Kubernetes Engine, el único requisito de formato es el siguiente: La entrada de registro contiene el mensaje de excepción completo y el seguimiento de pila.

Para obtener información sobre cómo dar formato al mensaje de excepción y al seguimiento de pila, consulta la sección ReportedErrorEvent en la página de referencia report de Error Reporting. ,

Especifica @type

Si tu entrada de registro contiene un campo con un especificador @type y el valor para ese especificador es type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent, Error Reporting evalúa la entrada del registro como si todos los campos obligatorios estuvieran presentes y captura el evento de error.

Representación JSON

Cuando envíes datos de errores con Cloud Logging, el ReportedErrorEvent que proporciones debe usar la siguiente estructura JSON:

{
  "eventTime": string,
  "serviceContext": {
    "service": string,     // Required.
    "version": string
  },
  "message": string,       // Required. This field contains the main error content to report.
                           // For information on populating this field, see Formatting requirements.
  "@type": string          // Optional. For information on this field, see Specify @type.
  "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
    }
  }
}

Tipos de recursos supervisados compatibles

Cuando se realiza el registro a través de la estructura LogEntry, el campo resource se debe establecer en uno de los siguientes tipos de recursos supervisados compatibles:

  • 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 textPayload no compatible

Ejemplos de formato de entradas de registros

En los siguientes ejemplos, se ilustran entradas de registro que Error Reporting procesa correctamente si se registran en LogEntry.jsonPayload.

Esta entrada de registro está agrupada porque @typese especificó correctamente:

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

El message de la carga útil de esta entrada de registro contiene un seguimiento de pila y una excepción, por lo que Error Reporting también lo agrupa:

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

Para obtener más detalles sobre los campos que se usan en una instancia de ReportedErrorEvent, consulta la documentación.