Registrar mensaje en archivo y consola en Python

Subodh Adhikari 10 octubre 2023
  1. Utilice el módulo logging para imprimir el mensaje de registro en el archivo y la consola en Python
  2. Utilice el módulo logging para imprimir el mensaje de registro en la consola en Python
  3. Utilice el módulo logging para imprimir el mensaje de registro en un archivo en Python
Registrar mensaje en archivo y consola en Python

Este tutorial presentará algunos métodos para registrar cadenas de depuración en un archivo y una consola en Python.

Utilice el módulo logging para imprimir el mensaje de registro en el archivo y la consola en Python

El registro es el proceso de mantener registros de varios eventos que ocurren en un sistema. Esos eventos pueden ser datos de entrada, procesos, hilos, datos de salida, información procesada, errores, advertencias, avisos. Los diversos eventos se rastrean y almacenan en un archivo de registro. Python proporciona el módulo logging que facilita a los programadores registrar los diversos eventos ocurridos. El módulo tiene clases y métodos específicos. Loggers, Handlers, Filters y Formatters son las clases básicas que define el módulo de logging.

El método basicConfig() realiza la configuración básica. Crea un StreamHandler utilizando un Formateador predeterminado. Luego, se agrega al registrador raíz. Los niveles de registro se representan en valores numéricos. Hay seis niveles de registro: CRITICAL, ERROR, WARNING, INFO, DEBUG y NOTSET. Hemos establecido el nivel de registro en INFO más abajo. Por lo tanto, se muestran o almacenan INFO, WARNING, ERROR y CRITICAL.

Para escribir en la consola y el archivo, usaremos logging.basicConfig(), que puede tomar manejadores de argumentos y simplificar mucho la configuración del registro, especialmente cuando se configuran múltiples manejadores con el mismo formateador. Usamos el método FileHandler() para escribir en un archivo y usamos debug.log para registrar toda la información. De manera similar, para escribir en una consola, usamos StreamHandler(). Por defecto, StreamHandler() escribe en stderr. Para escribir en stdout, importamos el módulo sys y pasamos sys.stdout explícitamente a StreamHandler().

En el siguiente ejemplo, los registros se imprimen en la consola y el archivo debug.log.

# python 3.x
import logging
import sys

logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s [%(levelname)s] %(message)s",
    handlers=[logging.FileHandler("debug.log"), logging.StreamHandler(sys.stdout)],
)
logging.debug("This message is skipped as a level is set as INFO")
logging.info("So should this")
logging.warning("And this, too")
logging.error("Testing non-ASCII character, Ø and ö")

Producción :

2021-07-28 14:50:01,348 [INFO] So should this
2021-07-28 14:50:01,349 [WARNING] And this, too
2021-07-28 14:50:01,349 [ERROR] Testing non-ASCII character, Ø and ö

Utilice el módulo logging para imprimir el mensaje de registro en la consola en Python

Para usar el registro y establecer la configuración básica, usamos logging.basicConfig(). Entonces, en lugar de print(), llamamos logging.{level}(message)para mostrar el mensaje en la consola. Dado que configuramos el nivel como INFO en la configuración basicConfig(), llamamos a logging.info() más adelante en el programa. Y todo el mensaje de la cadena se pasa a logging.info(), que luego se muestra en la consola.

Código de ejemplo:

# python 3.x
import logging

logging.basicConfig(level=logging.INFO)


def area(l, b):
    """Compute the area of a rectangle"""
    return l * b


logging.info(
    "Area of length: {l} and breadth: {b} is {c}".format(l=3, b=4, c=area(l=3, b=4))
)

Producción :

INFO:root:Area of length: 3 and breadth: 4 is 12

Utilice el módulo logging para imprimir el mensaje de registro en un archivo en Python

Si usamos varios módulos en un programa, entonces el uso del módulo raíz tiene serias limitaciones. Es por eso que necesitamos crear un nuevo registrador usando el método logger.getLogger(name).

Existe una convención para usar la variable __name__ como el nombre del registrador. Una vez que hemos creado un nuevo registrador, debemos recordar registrar todos nuestros mensajes usando el nuevo logger.info() en lugar del método logging.info() de la raíz. Un FileHandler() se utiliza para hacer que nuestro registrador personalizado inicie sesión en un archivo diferente. Aquí registramos nuestra información en logfile.log. Asimismo, se utiliza un Formatter() para cambiar el formato de nuestros mensajes registrados. Y el Formatter se establece en el objeto FileHandler y no directamente en el registrador.

Por ejemplo, use getLogger() para crear u obtener un registrador. Luego, use el método setLogger() para establecer el nivel de registro. Establezca el nivel en logging.WARNING. A continuación, utilice el método FileHandler() para definir el controlador y el método Formatter() para configurar el formateador. Luego, use el método addHandler() para agregar el manejador al registrador. Por último, escribe algunos mensajes para probar. Podemos ver los registros en el archivo log_file.log.

Código de ejemplo:

# python 3.x
import logging

logger = logging.getLogger(__name__)
logger.setLevel(logging.WARNING)
handler = logging.FileHandler("log_file.log")
formatter = logging.Formatter(
    "%(asctime)s : %(name)s  : %(funcName)s : %(levelname)s : %(message)s"
)
handler.setFormatter(formatter)
logger.addHandler(handler)

logger.debug("A debug message")
logger.info("An info message")
logger.warning("There is something wrong")
logger.error("An error has happened.")
logger.critical("Fatal error occured. Cannot continue")

Producción :

2021-07-30 11:55:31,047 : __main__  : <module> : WARNING : There is something wrong
2021-07-30 11:55:31,047 : __main__  : <module> : ERROR : An error has happened.
2021-07-30 11:55:31,047 : __main__  : <module> : CRITICAL : Fatal error occured. Cannot continue

Artículo relacionado - Python Logging