Leer y escribir registros de aplicaciones

Información general

Cuando se envía una solicitud a tu aplicación, App Engine escribe automáticamente un registro de solicitudes. Durante la gestión de la solicitud, tu aplicación también puede escribir registros de aplicaciones. En esta página, aprenderás a escribir registros de aplicaciones desde tu aplicación, a ver los registros en la consolaGoogle Cloud y a interpretar los datos de registro de solicitudes que escribe App Engine durante la solicitud.

Para obtener información sobre cómo descargar datos de registro, consulta el artículo Descripción general de las exportaciones de registros.

Registros de solicitudes y registros de aplicaciones

Hay dos categorías de datos de registro: registros de solicitudes y registros de aplicaciones. App Engine escribe automáticamente un registro de solicitudes para cada solicitud gestionada por tu aplicación, que contiene información como el ID del proyecto, la versión HTTP, etc. Para ver una lista completa de las propiedades disponibles de los registros de solicitudes, consulta RequestLogs. Consulta también la tabla de registro de solicitudes para ver las descripciones de los campos del registro de solicitudes.

Cada registro de solicitudes contiene una lista de registros de aplicaciones (AppLogLine) asociados a esa solicitud, devueltos en el método RequestLogs.getAppLogLines(). Cada registro de aplicación contiene la hora en la que se escribió el registro, el mensaje del registro y el nivel del registro.

Escribir registros de aplicaciones

El SDK de Java de App Engine permite a los desarrolladores registrar los siguientes niveles de gravedad:

  • SEVERE
  • ADVERTENCIA
  • INFO
  • CONFIG
  • FINE
  • FINER
  • FINEST

Los niveles de registro INFO, WARNING y SEVERE aparecen en los registros sin necesidad de configuración adicional. Para añadir otros niveles de registro a tu aplicación Java, debes añadir las propiedades del sistema adecuadas al archivo appengine-web.xml de tu proyecto. También es posible que tengas que modificar el archivo logging.properties para definir el nivel de registro que quieras. Ambos archivos se crean cuando creas un proyecto de App Engine Java con Maven. Puedes encontrar estos archivos en las siguientes ubicaciones:

Estructura de proyectos de Maven

Para añadir niveles de registro distintos de INFO, WARNING o SEVERE, edita el archivo appengine-web.xml para añadir lo siguiente dentro de las etiquetas <appengine-web-app>:

    <system-properties>
       <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
    </system-properties>

El nivel de registro predeterminado en logging.properties es INFO. Para cambiar el nivel de registro predeterminado de todas las clases de tu aplicación, edita el archivo logging.properties para cambiar el nivel. Por ejemplo, puedes cambiar .level = INFO por .level = WARNING.

En el código de tu aplicación, escribe mensajes de registro con la API java.util.logging.Logger. En el ejemplo siguiente se escribe un mensaje de registro de información:

import java.util.logging.Logger;
//...

public class MyClass {

  private static final Logger log = Logger.getLogger(MyClass.class.getName());
  log.info("Your information log message.");
  //....

Cuando se ejecuta tu aplicación, App Engine registra los mensajes y los pone a disposición en el explorador de registros.

Registrar el formato de la URL en la consola de Google Cloud

Consulta la siguiente URL de ejemplo para ver el formato de la URL de registro en la consola Google Cloud :

https://console.cloud.google.com/logs?filters=request_id:000000db00ff00ff827e493472570001737e73686966746361727331000168656164000100

Leer registros en la consola

Para ver los registros escritos por las aplicaciones que se ejecutan en el entorno estándar, usa el Explorador de registros.

Un registro típico de App Engine contiene datos en el formato de registro combinado de Apache, junto con algunos campos especiales de App Engine, como se muestra en el siguiente registro de ejemplo:

192.0.2.0 - test [27/Jun/2014:09:11:47 -0700] "GET / HTTP/1.1" 200 414
"http://www.example.com/index.html"
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"
"1-dot-calm-sylph-602.appspot.com" ms=195 cpu_ms=42 cpm_usd=0.000046
loading_request=1 instance=00c61b117cfeb66f973d7df1b7f4ae1f064d app_engine_release=

Información sobre los campos de los registros de solicitudes

En la tabla siguiente se enumeran los campos por orden de aparición junto con una descripción:

Field Order Nombre del campo ¿Siempre presente? Descripción
1 Dirección del cliente Dirección IP del cliente. Ejemplo: 192.0.2.0
2 Identidad RFC 1413 No Identidad del cliente conforme al RFC 1413. Casi siempre es el carácter -
3 Usuario No Solo se presenta si la aplicación usa la API Users y el usuario ha iniciado sesión. Este valor es la parte del "nombre" de la cuenta de Google. Por ejemplo, si la cuenta de Google es test@example.com, el nombre que se registra en este campo es test.
4 Marca de tiempo Marca de tiempo de la solicitud. Ejemplo: [27/Jun/2014:09:11:47 -0700]
5 Cadena de consulta de solicitud Primera línea de la solicitud, que contiene el método, la ruta y la versión de HTTP. Ejemplo: GET / HTTP/1.1
6 Código de estado HTTP Código de estado HTTP devuelto. Ejemplo: 200
7 Tamaño de la respuesta Tamaño de la respuesta en bytes. Ejemplo: 414
8 Ruta referente No Si no hay referente, el registro no contiene ninguna ruta, solo -. Ejemplo de ruta referente: "http://www.example.com/index.html".
9 User-agent Identifica el navegador y el sistema operativo en el servidor web. Ejemplo: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36
10 Nombre de host El nombre de host que usa el cliente para conectarse a la aplicación de App Engine. Ejemplo : (1-dot-calm-sylph-602.appspot.com)
11 Tiempo real Tiempo total de reloj en milisegundos que App Engine ha dedicado a la solicitud. Esta duración no incluye el tiempo transcurrido entre el cliente y el servidor que ejecuta la instancia de tu aplicación. Ejemplo: ms=195
12 Milisegundos de CPU Milisegundos de CPU necesarios para completar la solicitud. Es el número de milisegundos que la CPU ha dedicado a ejecutar el código de tu aplicación, expresado en términos de una CPU Intel x86 básica de 1,2 GHz. Si la CPU que se usa es más rápida que la de referencia, los milisegundos de la CPU pueden ser superiores al tiempo de reloj real definido anteriormente. Ejemplo: cpu_ms=42
13 Código de salida No Solo se incluye si la instancia se ha cerrado después de recibir la solicitud. En el formato exit_code=XXX, donde XXX es un número de 3 dígitos que corresponde al motivo por el que se ha apagado la instancia. Los códigos de salida no están documentados, ya que su objetivo principal es ayudar a Google a detectar y solucionar problemas.
14 Coste estimado OBSOLETO. Coste estimado de 1000 solicitudes como esta, en USD. Ejemplo: cpm_usd=0.000046
15 Nombre de la cola No Nombre de la cola de tareas utilizada. Solo se presenta si la solicitud ha usado una cola de tareas. Ejemplo: queue_name=default
16 Nombre de la tarea No Nombre de la tarea ejecutada en la cola de tareas de esta solicitud. Solo se incluye si la solicitud ha provocado que se ponga en cola una tarea. Ejemplo: task_name=7287390692361099748
17 Cola pendiente No Solo se incluye si una solicitud ha estado en una cola pendiente durante un tiempo. Si hay muchos de estos errores en sus registros o los valores son altos, puede que necesite más instancias para atender su tráfico. Ejemplo: pending_ms=195
18 Cargando solicitud No Solo se incluye si la solicitud es de carga. Esto significa que se ha tenido que iniciar una instancia. Lo ideal es que tus instancias estén activas y en buen estado el mayor tiempo posible, sirviendo un gran número de solicitudes antes de reciclarse y tener que volver a iniciarse. Esto significa que no deberías ver demasiados en tus registros. Ejemplo: loading_request=1
19 Instancia Identificador único de la instancia que gestiona la solicitud. Ejemplo: instance=00c61b117cfeb66f973d7df1b7f4ae1f064d
20 Versión La versión actual de App Engine que se usa en la producción de App Engine:

Cuotas y límites

Tu aplicación se ve afectada por las siguientes cuotas relacionadas con los registros:

  • Datos de registros obtenidos a través de la API Logs.
  • Asignación y conservación de la ingesta de registros.

Cuota de datos recuperados

Los primeros 100 megabytes de datos de registro recuperados al día mediante llamadas a la API de registros son gratuitos. Si los datos superan los 100 MB, se cobrarán 0,12 USD por GB.

Asignación de ingestión de registros

Google Cloud Observability proporciona el almacenamiento de registros a las aplicaciones de App Engine. Consulta la página Precios de Google Cloud Observability para obtener más información sobre los costes y los límites de registro. Si quieres almacenar tus registros a largo plazo, puedes exportarlos de Google Cloud Observability a Cloud Storage, BigQuery y Pub/Sub.