Link Search Menu Expand Document
El Libro De Python (24.95 €) 39.95 €

Logging y verbosity con logging

El uso de logs es muy importante en cualquier código. En este ejemplo vamos a ver como establecer diferentes niveles de importancia en tus logs y configurarlo con un argumento por línea de comandos.

Los logs permiten observar el código desde el exterior, viendo por donde pasa la ejecución. Son de vital importancia cuando las cosas no salen como uno espera, ya que ayudan a entender que pasó. Es importante poder controlar el nivel de detalle de los logs, ya que no siempre queremos verlo todo.

Para pequeños scripts tal vez basta con usar print. Pero en programas complejos que corren 24/7 necesitamos herramientas más profesionales como logging, lo que permite tener diferentes niveles de logs según su importancia.

  • INFO: Para información importante, se usa logger.info().
  • DEBUG: Para información mas detallada, se usa logger.debug().

En el siguiente ejemplo vemos como usar logging con argparse para que puedas configurar el nivel de detalle de tus logs desde la línea de comandos.

# programa.py
import argparse
import logging

parser = argparse.ArgumentParser(description="Nivel de verbosity")
parser.add_argument('--log-level', type=str,
                    default='INFO',
                    choices=['DEBUG', 'INFO',
                             'WARNING', 'ERROR'])

args = parser.parse_args()
logging.basicConfig(level=args.log_level, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger('logger')

logger.info('Ejemplo info')
logger.debug('Ejemplo debug')
logger.warning('Ejemplo warning')

Si ejecutamos nuestro código con INFO solo se muestran los logs hasta INFO.

python3 programa.py --log-level=INFO
# 2024-10-30 12:51:06,991 - INFO - Ejemplo info
# 2024-10-30 12:51:06,991 - WARNING - Ejemplo warning

Si usamos DEBUG se muestran los logs hasta DEBUG.

python3 programa.py --log-level=DEBUG
# 2024-10-30 12:50:37,421 - INFO - Ejemplo info
# 2024-10-30 12:50:37,421 - DEBUG - Ejemplo debug
# 2024-10-30 12:50:37,421 - WARNING - Ejemplo warning

Estos son los diferentes niveles que ofrece logging.

DEBUG < INFO < WARNING < ERROR < CRITICAL

Como podemos ver log-level permite configurar el detalle de los logs. Puedes usar INFO para información general y DEBUG para el máximo detalle.

✏️ Ejercicios:

  • Modifica el código para que acepte el nivel de log como INFO e info sin importar las mayúsculas.
  • Escribe una función donde uses logger.info y logger.debug para logs con diferente importancia.