Cómo leer y escribir registros de la aplicación

Descripción general

Cuando se envía una solicitud a tu aplicación, App Engine escribe de forma automática un registro de solicitud. Durante el manejo de la solicitud, tu aplicación también puede escribir registros de aplicaciones. En esta página, aprenderás cómo escribir registros de aplicación desde tu aplicación, cómo leer registros de solicitudes y aplicación de manera programática con una API de registros, cómo ver el registro en Google Cloud Platform Console y, además, cómo entender los datos de registro de la solicitud que App Engine escribe durante esta.

Registros de solicitud frente a registros de la aplicación

Existen dos categorías de datos de registro: los registros de solicitudes y los registros de aplicación. App Engine escribe de forma automática un registro de solicitud por cada solicitud que tu aplicación controla y contiene información como el ID del proyecto y la versión HTTP, entre otras. Para conocer una lista completa de todas las propiedades disponibles de los registros de solicitudes, consulta RequestLogs. También puedes consultar la tabla de registro de solicitud para obtener descripciones de los campos de registro de solicitud.

Cada registro de solicitud contiene una lista de registros de aplicación (AppLogLine) asociada con esa solicitud, que se muestra en el método RequestLogs.getAppLogLines(). Cada registro de aplicación contiene el mensaje, el nivel y la hora en que se escribió el registro.

Cómo escribir registros de aplicación

El SDK de Java en App Engine permite que un desarrollador registre los siguientes niveles de gravedad:

  • SEVERE
  • WARNING
  • INFO
  • CONFIG
  • FINE
  • FINER
  • FINEST

Los niveles de registro, INFO, WARNING y SEVERE, aparecen en los registros sin configuración adicional. Para agregar otros niveles de registro a tu aplicación Java, debes agregar las propiedades del sistema apropiadas al archivo appengine-web.xml de tu proyecto. También podrías necesitar modificar el archivo logging.properties para establecer el nivel de registro deseado. Ambos archivos se generan cuando creas un proyecto Java de App Engine nuevo con Maven. Puedes encontrar estos archivos en las ubicaciones siguientes:

Diseño de proyecto de Maven

Para agregar niveles de registro que no sean INFO, WARNING, o SEVERE, edita el archivo appengine-web.xml y agrega 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 a todas las clases en tu aplicación, edita el archivo logging.properties. Por ejemplo, podrías cambiar .level = INFO a .level = WARNING.

En tu código de aplicación, escribe los mensajes de registro con la API de java.util.logging.Logger. El ejemplo a continuación 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 tu aplicación se ejecuta, App Engine registra los mensajes y los hace disponibles. Los puedes leer de manera programática con las API de registros como se muestra a continuación, o puedes explorarlos en el Visor de registros. También puedes descargar los archivos de registro con la herramienta AppCfg.

Cómo registrar el formato URL en Google Cloud Platform Console

Observa la siguiente muestra de URL para ver un ejemplo del formato URL de registro en GCP Console:

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

Cómo leer registros en la consola

Si deseas ver los registros escritos por aplicaciones que se ejecutan en el entorno flexible, usa el visor de registros.

Si deseas filtrar las entradas de registros por etiqueta o búsqueda de texto en el visor de registros, consulta Filtros de registros básicos. Si deseas escribir filtros de registros avanzados con expresiones que especifiquen un conjunto de entradas de cualquier cantidad de registros, consulta Filtros de registros avanzados.

Un registro característico de App Engine contiene datos en formato de registro combinado Apache, junto con algunos campos especiales de App Engine, como figura en el siguiente registro de muestra:

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=1.9.76

Cómo entender los campos de registro de solicitud

En la siguiente tabla, se muestran los campos en orden de aparición junto con una descripción:

Orden del campo Nombre del campo ¿Siempre presente? Descripción
1 Dirección del cliente Dirección IP de cliente. Ejemplo: 192.0.2.0.
2 Identidad RFC 1413 No Identidad RFC 1413 del cliente. Casi siempre es el carácter -.
3 Usuario No Solo presente si la aplicación usa la API de Usuarios y si el usuario ya accedió. Este valor es la porción del "sobrenombre" de la Cuenta de Google. Por ejemplo, si la Cuenta de Google es test@example.com, el sobrenombre 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 String de consulta de la solicitud Primera línea de la solicitud; contiene el método, la ruta y la versión HTTP. Ejemplo: GET / HTTP/1.1.
6 Código de estado HTTP Código de estado HTTP que se muestra. Ejemplo: 200.
7 Tamaño de la respuesta Tamaño de la respuesta en bytes. Ejemplo: 414.
8 Ruta del referente No En caso de que no haya referente, el registro no contendrá una ruta, sino solo -. Ejemplo de ruta de referente: "http://www.example.com/index.html".
9 Usuario-agente Identifica el navegador y el sistema operativo para 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 el cliente usa para conectarse a la aplicación de App Engine. Ejemplo: (1-dot-calm-sylph-602.appspot.com).
11 Tiempo real transcurrido Tiempo real total en milisegundos que App Engine dedica a la solicitud. Esta duración no incluye el tiempo que tarda el cliente y el servidor para ejecutar la instancia de tu aplicación. Ejemplo: ms=195.
12 Milisegundos de la CPU Milisegundos de la CPU requeridos a fin de completar la solicitud. Es la cantidad de milisegundos que la CPU tarda en ejecutar el código de la aplicación, expresado en términos de una CPU de modelo de referencia de 1.2 GHz Intel x86. Si la CPU que se usa es más rápida que el modelo de referencia, los milisegundos pueden ser más que el tiempo real definido con anterioridad. Ejemplo: cpu_ms=42.
13 Código de salida No Presente únicamente si la instancia se cerró tras recibir la solicitud. Su formato es exit_code=XXX, donde XXX es un número de 3 dígitos que se corresponde a la razón por la que la instancia se cerró. Los códigos de salida no se documentan, ya que su objetivo principal es ayudar a Google a encontrar y solucionar problemas.
14 Costo estimado OBSOLETO. Costo estimado de 1,000 solicitudes como esta, en USD. Ejemplo: cpm_usd=0.000046.
15 Nombre de la lista de tareas en cola No El nombre de la lista de tareas en cola usado. Solo está presente si la solicitud usó una lista de tareas en cola. Ejemplo: queue_name=default.
16 Nombre de la tarea No El nombre de la tarea ejecutada en la lista de tareas en cola de esta solicitud. Solo está presente si el resultado de la solicitud fue poner en cola una tarea. Ejemplo: task_name=7287390692361099748.
17 Cola pendiente No Solo está presente si una solicitud estuvo algún tiempo en una cola pendiente. Si existen muchas de estas en tus registros o, si los valores son altos, podría indicar que necesitas más instancias para entregar el tráfico. Ejemplo: pending_ms=195.
18 Solicitud de carga No Solo está presente si la solicitud es una solicitud de carga. Esto significa que se tuvo que iniciar una instancia. Lo ideal es que tus instancias funcionen bien por el mayor tiempo posible, y que entreguen una gran cantidad de solicitudes antes de reciclarse y tener que iniciarse de nuevo. Eso implica que no deberías ver demasiadas de estas en tus registros. Ejemplo: loading_request=1.
19 Instancia Identificador único para la instancia que maneja 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: 1.9.76

Cuotas y límites

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

  • Datos de registros recuperados mediante la API de registros.
  • Asignación y retención de transferencia de registro.

Cuota correspondiente a los datos recuperados

Los primeros 100 megabytes de datos de registro recuperados por día mediante las llamadas a la API de registros son gratuitos. Una vez superado ese importe, deberás habilitar la facturación para tu aplicación si deseas que las próximas llamadas a la API de registros funcionen. Si la facturación está habilitada en tu aplicación, los datos que superen los 100 megabytes darán como resultado un cargo de $0.12/GB.

Asignación de transferencia de registros

Stackdriver se encarga de los registros de las aplicaciones de App Engine. Consulta Precios de Stackdriver para obtener más información sobre los costos y límites de los registros. Para obtener un almacenamiento a largo plazo de los registros, puedes exportar registros desde Stackdriver hacia Cloud Storage, BigQuery y Cloud Pub/Sub.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Entorno estándar de App Engine para Java