Registrador global de Python

Mehvish Ashiq 21 junio 2023
  1. Introducción al registro y su importancia en Python
  2. Use el módulo de registro globalmente en Python
Registrador global de Python

Este tutorial presenta el registro, sus diversos niveles y su importancia en Python. Luego, aprenderemos cómo podemos usar el módulo de registro de Python globalmente.

Introducción al registro y su importancia en Python

El registro es una forma de realizar un seguimiento de los eventos que ocurren mientras se ejecuta el software. Los desarrolladores de software agregan llamadas de registro para registrar los errores y eventos que ocurren cuando alguien ejecuta el programa.

En la programación de Python, tenemos un módulo incorporado conocido como registro que puede registrar dichos errores y eventos. Tenga en cuenta que los eventos son el mensaje y, opcionalmente, pueden contener datos que son específicos de un evento.

Estos eventos pueden ser de diferentes niveles/gravedad, asignados por un desarrollador de software. Entonces, podemos decir que el registro es una herramienta muy poderosa para depurar nuestra aplicación y rastrear cualquier información necesaria.

El módulo de registro nos proporciona diferentes métodos para que nuestra aplicación configure varios controladores de registro, enrute los mensajes de registro a estos controladores y permita una configuración altamente flexible, lo que ayuda a manejar varios casos de uso.

El módulo de registro también tiene diferentes niveles de registro, que nos ayudan a lidiar con varios niveles de gravedad. A continuación, se incluye una breve descripción de los niveles de registro:

  • INFO - Confirma que varias cosas están funcionando como se esperaba.
  • DEBUG - Proporciona información detallada típica de interés cuando alguien diagnostica los problemas.
  • ADVERTENCIA - Es una indicación de que algo sucede de forma inesperada. También podemos decir que ADVERTENCIA indica un problema que puede ocurrir en breve, por ejemplo, poco espacio en disco.
  • CRÍTICO - Indica un error grave que la propia aplicación no puede seguir ejecutando.
  • ERROR - Representa un problema más grave que no permite que el programa realice una operación o función.

Use el módulo de registro globalmente en Python

Podemos usar el módulo de registro local y globalmente en Python. Aquí, localmente significa usar el módulo de registro en un ámbito específico; por ejemplo, importamos el módulo logging en el archivo A.py, por lo que solo podemos usarlo en A.py, no en el archivo B.py.

Por otro lado, globalmente significa usar en todas partes en el archivo A.py y el archivo B.py. Es importante comprender el uso del módulo de registro localmente para aprender el registrador global de Python.

Código de ejemplo utilizando el módulo logging localmente (guardado en el archivo test.py):

import logging

logger = logging.getLogger("test_logger")
logger.setLevel(logging.INFO)


def sum_numbers(number1, number2):
    try:
        output = number1 + number2
    except TypeError:
        logger.exception("Oh! TypeError Occurred")
    else:
        return output


result = sum_numbers(10, "Mehvish")

Aquí, estamos usando el módulo logging localmente en el archivo test.py, que hemos importado.

Luego, usamos getLogger() para comenzar a iniciar sesión usando el módulo logging en Python. La función de fábrica logging.getLogger(name) se ejecuta para eso.

El getLogger() toma un argumento, que es el nombre de un registrador, y devuelve la referencia a la instancia del registrador (objeto del registrador) con el nombre si se especifica o raíz si no.

Tenga en cuenta que varias llamadas a getLogger() con el nombre exacto devuelven la referencia a la misma instancia del registrador, lo que es útil para usarlo globalmente (lo veremos en un momento).

A continuación, usamos el método setLevel() para establecer el nivel de registro y escribimos la función sum_numbers(), que toma dos números de tipo int, los suma y devuelve el resultado si se dan los valores correctos; de lo contrario, genera TypeError.

Finalmente, llamamos a sum_numbers() para ver nuestro módulo de registro en acción produciendo los siguientes resultados.

Producción :

Oh! TypeError Occurred
Traceback (most recent call last):
  File "E:\Code\use_logging_locally\test.py", line 8, in sum
    output = number1 + number2
TypeError: unsupported operand type(s) for +: 'int' and 'str'

Usar el módulo de registro es muy fácil, pero ¿cómo aprovechar este módulo a nivel mundial? Aprendamos eso a continuación.

Código de ejemplo (guardado en el archivo log.py):

import logging


def set_custom_logger(name):
    formatter = logging.Formatter(
        fmt="%(asctime)s - %(levelname)s - %(module)s - %(message)s"
    )

    handler = logging.StreamHandler()
    handler.setFormatter(formatter)

    logger = logging.getLogger(name)
    logger.setLevel(logging.DEBUG)
    logger.addHandler(handler)
    return logger

Código de ejemplo (guardado en el archivo submodule.py):

import logging

logger = logging.getLogger("root")
logger.debug("submodule message")

Código de ejemplo (guardado en el archivo main.py):

import submodule
import log

logger = log.setup_custom_logger("root")
logger.debug("main message")

Producción :

2022-10-27 09:31:02,447 - DEBUG - main - main message
2022-10-27 09:31:02,450 - DEBUG - submodule - submodule message

Este ejemplo de código imprime la fecha, la hora, el nivel de registro, el nombre del módulo y el mensaje. Tenga en cuenta que usamos logging.getLogger() en submodule.py para usar la instancia de registrador exacta que usamos en el archivo log.py.

¿Cómo? El logging.getLogger(name) normalmente se ejecuta para comenzar a iniciar sesión usando el módulo logging en Python. El getLogger() acepta un argumento, el nombre del registrador.

Al usar la función getLogger(), obtenemos una referencia a la instancia del registrador con el nombre dado si se proporciona, o raíz, si no se especifica.

Hacer múltiples llamadas al getLogger() que tiene el nombre exacto devuelve la referencia al objeto registrador exacto, lo que nos ayuda a usarlo globalmente.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Artículo relacionado - Python Logging