Logging y debugging en Python: observar sistemas sin adivinar

Aprende a reemplazar prints por logging estructurado, usar niveles correctamente y depurar fallos con estrategia reproducible.

En producción no puedes depurar con prints dispersos; necesitas trazabilidad con niveles y contexto.

`logging` permite clasificar eventos (`DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`) y filtrar por severidad.

Un buen log responde tres preguntas: qué pasó, dónde pasó y con qué datos relevantes ocurrió.

Debugging profesional implica reproducir, aislar hipótesis, instrumentar y validar fix con evidencia.

  • No todos los mensajes tienen la misma importancia; clasifícalos.
  • `DEBUG` sirve para detalle interno en desarrollo, `INFO` para eventos normales, `WARNING` para situaciones anómalas tolerables.
  • `ERROR` y `CRITICAL` representan fallos relevantes que requieren atención inmediata o escalada.
  • Si todo está en el mismo nivel, tus logs pierden valor operativo.
  • Un log sin contexto obliga a adivinar y retrasa diagnóstico.

1) Logging con niveles: del ruido a la señal

No todos los mensajes tienen la misma importancia; clasifícalos.

`DEBUG` sirve para detalle interno en desarrollo, `INFO` para eventos normales, `WARNING` para situaciones anómalas tolerables.

`ERROR` y `CRITICAL` representan fallos relevantes que requieren atención inmediata o escalada.

Si todo está en el mismo nivel, tus logs pierden valor operativo.

2) Añadir contexto a los logs

Un log sin contexto obliga a adivinar y retrasa diagnóstico.

Incluye identificadores de operación (request_id, user_id, job_id) para correlacionar eventos.

Evita loggear datos sensibles (tokens, contraseñas, PII sin anonimizar).

Contexto bien elegido acelera RCA (root cause analysis) cuando algo falla.

3) Estrategia de debugging reproducible

Depurar bien es un proceso, no improvisación.

Paso 1: reproduce el fallo con caso mínimo confiable.

Paso 2: formula hipótesis y añade instrumentación (logs, asserts, breakpoints).

Paso 3: aplica fix mínimo, valida con test y revisa impacto lateral.

Herramientas como `pdb` o breakpoints del IDE son útiles, pero sin método no escalan.

  • No tapes errores con `except` genérico sin análisis.
  • Loggea eventos de negocio y técnicos por separado.
  • Valida fix con prueba automatizada cuando sea posible.
  • Documenta causa raíz y prevención futura.
Python
18

Logging y debugging en Python: observar sistemas sin adivinar

Aprende a reemplazar prints por logging estructurado, usar niveles correctamente y depurar fallos con estrategia reproducible.

Código del tema: Automatizacion y codigo legible en Python

📘 Teoría

1) Logging con niveles: del ruido a la señal

No todos los mensajes tienen la misma importancia; clasifícalos.

1

`DEBUG` sirve para detalle interno en desarrollo, `INFO` para eventos normales, `WARNING` para situaciones anómalas tolerables.

2

`ERROR` y `CRITICAL` representan fallos relevantes que requieren atención inmediata o escalada.

3

Si todo está en el mismo nivel, tus logs pierden valor operativo.

Configuración mínima útil
import logging

logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s %(levelname)s %(name)s - %(message)s'
)

logger = logging.getLogger('app')
logger.info('Servicio iniciado')

2) Añadir contexto a los logs

Un log sin contexto obliga a adivinar y retrasa diagnóstico.

Incluye identificadores de operación (request_id, user_id, job_id) para correlacionar eventos.

Evita loggear datos sensibles (tokens, contraseñas, PII sin anonimizar).

Contexto bien elegido acelera RCA (root cause analysis) cuando algo falla.

1

Log de operación con metadatos

Información suficiente para trazar una petición.

2

Registrar excepción con stacktrace

Usa `logger.exception(...)` dentro de `except`.

3) Estrategia de debugging reproducible

Depurar bien es un proceso, no improvisación.

Paso 1: reproduce el fallo con caso mínimo confiable.

Paso 2: formula hipótesis y añade instrumentación (logs, asserts, breakpoints).

Paso 3: aplica fix mínimo, valida con test y revisa impacto lateral.

Herramientas como `pdb` o breakpoints del IDE son útiles, pero sin método no escalan.

  • No tapes errores con `except` genérico sin análisis.
  • Loggea eventos de negocio y técnicos por separado.
  • Valida fix con prueba automatizada cuando sea posible.
  • Documenta causa raíz y prevención futura.
Breakpoint con `pdb`
import pdb


def calcular_total(items: list[float]) -> float:
    pdb.set_trace()
    return sum(items)


print(calcular_total([10.0, 20.5]))

🧪 Aprende probando

Ejemplo Ejemplo: pipeline con logs por etapa Instrumenta fases de proceso para localizar fallos sin inspección manual extensa.

🏁 Retos

Reto Reto: configura nivel INFO correctamente Completa la configuración de logging para que los mensajes informativos se registren.

🧰 Recursos

Test

Comprueba tus conocimientos con un test sobre Python.

Test de Python

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros 😉.

Esta la hice en febrero de 2026 para facilitar el aprendizaje de mis alumnxs. Aprender desarrollo web practicando. La idea es que crezca semanalmente con nuevos temas, tests y retos.

Inspirado en MDN, en W3Schools, en Codepen, en el crack de Manz y en mil sitios de documentación sobre desarrollo web. Quería aportar además de bloques teóricos con ejemplos, la gamificación de los retos y el sistema de test que ya tenía en culTest .

Si te gustó, si no te gustó, si quieres saludarme, o invitarme a 🍻 no dudes en escribirme en cristianeslava@gmail.com .