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 usalogger.info().DEBUG: Para información mas detallada, se usalogger.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
INFOeinfosin importar las mayúsculas. - Escribe una función donde uses
logger.infoylogger.debugpara logs con diferente importancia.