0 / 0
Volver a la versión inglesa de la documentación
Descarga del registro de usuario
Última actualización: 09 abr 2021
Descarga del registro de usuario

Puede añadir mensajes de registro en el código. Estos mensajes se envían a un archivo de registro de usuario que puede descargar desde el panel Notificaciones de la página Métricas mientras el trabajo se está ejecutando.

Un registro de usuario es un registro de tiempo de ejecución. Cada flujo de secuencias en ejecución envía mensajes a su propio archivo de registro.

La capacidad de registrar mensajes se aplica a los siguientes operadores de código Python.

  • Código (en orígenes, destinos y proceso y análisis)

No puede registrar mensajes procedentes de su código en el operador Filtro porque, en Python, las sentencias de registro dentro de expresiones condicionales no son válidas.

Para ver una hoja de resumen de la sintaxis de registro de Python, consulte Funcionamiento del registro en Python.

Importante

El registro de algo por suceso puede reducir significativamente la velocidad de rendimiento y puede hacer que se congestione el operador. Como resultado, el registro resulta más adecuado en los entornos de prueba que en los de producción.

Retención de mensajes de usuario

Se extraen todos los mensajes de usuario de los registros del sistema de un flujo (rastreo de app). Por lo tanto, la política de acumulación de rastreos de aplicación y el nivel de detalle del registro del flujo de secuencias también influyen sobre la cantidad de mensajes de usuario que se van a descargar en un registro de usuario descargado.

Problema conocido

Debido a una limitación temporal, solo los mensajes registrados a nivel de INFO o superior (WARN, ERROR) se muestran en el registro de usuario. Por lo tanto, utilice logger.info(), logger.warn() o logger.error().

Requisitos previos

El flujo de secuencias debe estar en el estado “En ejecución” en la página Métricas. Si el flujo de secuencias no se puede ejecutar debido a errores, significa que tiene errores del compilador, otros errores en el entorno o errores con servicios. Estos errores no se muestran en los registros de usuario.

Para descargar registros de usuario, siga los pasos siguientes:

  1. En el lienzo del flujo de secuencias, pulse el operador al que desea añadir código de registro.

  2. Añada código de registro. Consulte el Ejemplo 1.

  3. Repita el paso 2 para cada operador de código que necesite para registrar mensajes.

  4. Pulse el botón Ejecutar para guardar el flujo de secuencias, ejecutarlo y, a continuación, supervisarlo en la página Métricas.

  5. Cuando el flujo de secuencias se esté ejecutando en la página Métricas, pulse el Icono Notificación y luego pulse el Icono Descargara registros de usuario para descargar el registro. El registro no se comprime.

Iconos del panel Notificación

Ejemplo 1

Objetivo: Para utilizar un registrador para el rastreo o la depuración del código, añada un mensaje de depuración en una línea de código específica.

import sys
import logging

# Utilice este registrador para realizar el rastreo y la depuración del código:
logger = logging.getLogger(__name__)
# Ejemplo:
      logger.error('INFO: Got to step 2...')

En este otro ejemplo de adición de un mensaje de registro, la siguiente línea de código de registro logger.info('Hello there') genera este resultado en el registro de usuario 18 Apr 2018 21:13:24.145 [73343] INFO [My Cool Code] - Hello there.

En la tabla siguiente se muestra cada campo del resultado.

Fecha Hora [PID] Gravedad [Nombre del operador] Mensaje
18 Apr 2018 21:13:24.145 73343 INFO My Cool Code Hello there

Ejemplo 2

Objetivo: Ver cómo se combinan y se ordenan por indicación de fecha y hora en el registro de usuario los registros de usuario procedentes de varios procesos de un flujo de secuencias.

Nota: Los registros de usuario procedentes de varios procesos se combinan y se ordenan por indicación de fecha y hora. En el siguiente fragmento de código del registro de usuario se muestra el resultado de tres procesos (PID 73343, 73371 y 73372) de un flujo de secuencias.

18 Apr 2018 21:13:24.145 [73343] INFO [Source 1]  - Emitting event: {'bool': True, 'date': datetime.datetime(2017, 7, 7, 12, 55, 16), 'number': 7, 'text': 'today', 'description': 'All valid, int'}
18 Apr 2018 21:13:24.228 [73371] INFO [Source 2]  - Emitting event: {'bool': True, 'date': datetime.datetime(2017, 7, 7, 12, 55, 16), 'number': 7, 'text': 'today', 'description': 'All valid, int'}
18 Apr 2018 21:13:24.229 [73372] INFO [Source 3]  - Emitting event: {'bool': True, 'date': datetime.datetime(2017, 7, 7, 12, 55, 16), 'number': 7, 'text': 'today', 'description': 'All valid, int'}
18 Apr 2018 21:13:25.147 [73343] INFO [Source 1]  - Emitting event: {'bool': True, 'date': datetime.datetime(2017, 7, 7, 12, 55, 16), 'number': 3.14, 'text': 'today', 'description': 'All valid, float'}
18 Apr 2018 21:13:25.229 [73371] INFO [Source 2]  - Emitting event: {'bool': True, 'date': datetime.datetime(2017, 7, 7, 12, 55, 16), 'number': 3.14, 'text': 'today', 'description': 'All valid, float'}

Ejemplo 3

Objetivo: Mostrar cómo se incluyen los errores intencionados o involuntarios con los mensajes de registro en el registro de usuario.

El flujo de secuencias tiene la siguiente estructura.

  • Un operador de código que produce datos desde el panel Orígenes
  • Dos operadores de código de proceso de datos desde el panel Proceso y análisis

El operador Código (en proceso y análisis) genera un error de excepción siempre que fruit==melon.

 if (event['fruit'] == 'melon'):
        raise Exception("No melons, please!")

El otro operador de código (en proceso y análisis) genera un error de división por cero por error involuntaria siempre que fruit==almond.

 if (event['fruit'] == 'almond'):
        a = 2/0

Nota: Los errores, además de aparecer en el panel Notificación, también se muestran en los registros de usuario. Como resultado, puede realizar más fácilmente un seguimiento de los errores.

En el ejemplo siguiente se muestra cómo se ven los errores anteriores en el registro de usuario.

22 Apr 2018 11:57:55.906 [44742] INFO [Code with errors]  - Passing: {'amount': 4.0, 'unit': 'kg', 'fruit': 'almond', 'counter': 3.0}
22 Apr 2018 11:57:55.910 [44742] WARN [Code-in-the-middle]  - Passing: {'amount': 4.0, 'unit': 'kg', 'fruit': 'almond', 'counter': 3.0}
22 Apr 2018 11:57:55.910 [44742] ERROR [Code with errors]  - ZeroDivisionError: division by zero
22 Apr 2018 11:57:56.828 [44726] INFO [Beacon Code]  - About to submit (debug): {'counter': 4, 'unit': 't', 'fruit': 'melon', 'amount': 5}
22 Apr 2018 11:57:56.828 [44726] INFO [Beacon Code]  - Submitted (info): {'counter': 4, 'unit': 't', 'fruit': 'melon', 'amount': 5}
22 Apr 2018 11:57:56.829 [44726] INFO [Beacon Code]  - Submitted (info): {'counter': 4, 'unit': 't', 'fruit': 'melon', 'amount': 5}
22 Apr 2018 11:57:56.912 [44742] INFO [Code with errors]  - Passing: {'amount': 5.0, 'unit': 't', 'fruit': 'melon', 'counter': 4.0}
22 Apr 2018 11:57:56.915 [44742] WARN [Code-in-the-middle]  - Passing: {'amount': 5.0, 'unit': 't', 'fruit': 'melon', 'counter': 4.0}
22 Apr 2018 11:57:56.915 [44742] ERROR [Code with errors]  - Exception: No melons, please!
22 Apr 2018 11:57:56.916 [44742] WARN [Code-in-the-middle]  - Passing: {'amount': 5.0, 'unit': 't', 'fruit': 'melon', 'counter': 4.0}