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
INFO
einfo
sin importar las mayúsculas. - Escribe una función donde uses
logger.info
ylogger.debug
para logs con diferente importancia.