Conceptos básicos del módulo logging
Configure loggers, establezca niveles y emita mensajes correctamente.
Conceptos básicos del módulo logging es una lección gratuita de Python Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Python Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Python Academy incluye 4 lecciones en total.
¿Por qué usar logging en lugar de print?
El módulo logging proporciona niveles de severidad, destinos de salida configurables, marcas de tiempo y la posibilidad de silenciar la salida sin cambiar el código.
import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug("debug message")
logging.info("info message")
logging.warning("warning message")
logging.error("error message")
logging.critical("critical message")Niveles de log
Python define cinco niveles estándar en orden creciente de severidad: DEBUG, INFO, WARNING, ERROR y CRITICAL. Solo se emiten los mensajes cuyo nivel es igual o superior al nivel configurado.
import logging
# Numeric values:
# DEBUG = 10
# INFO = 20
# WARNING = 30
# ERROR = 40
# CRITICAL = 50
logging.basicConfig(level=logging.WARNING)
logging.debug("hidden") # not shown
logging.warning("shown") # shownObtener un logger
Use logging.getLogger(__name__) en cada módulo. Esto crea una jerarquía que coincide con la estructura de módulos.
import logging
logger = logging.getLogger(__name__)
def process(data):
logger.info("Processing %d items", len(data))
return [x * 2 for x in data]Opciones de basicConfig
basicConfig configura rápidamente el logger raíz. Entre los argumentos con nombre habituales se encuentran level, format, filename y filemode.
import logging
logging.basicConfig(
level=logging.DEBUG,
format="%(asctime)s %(levelname)s %(name)s — %(message)s",
datefmt="%Y-%m-%d %H:%M:%S",
)Campos del formato de log
Campos de formato clave: %(levelname)s, %(name)s, %(message)s, %(asctime)s, %(filename)s y %(lineno)d.
import logging
fmt = "%(asctime)s | %(levelname)-8s | %(name)s:%(lineno)d | %(message)s"
logging.basicConfig(level=logging.DEBUG, format=fmt)
logging.info("Server started on port 8080")Registro de excepciones
Use logger.exception() dentro de un bloque except para registrar el mensaje y el traceback completo.
import logging
logger = logging.getLogger(__name__)
try:
1 / 0
except ZeroDivisionError:
logger.exception("Division failed")
# Logs message + traceback automaticallyContexto adicional con extra=
Pase un diccionario como extra= para añadir campos personalizados al registro de log.
import logging
logger = logging.getLogger(__name__)
logging.basicConfig(
format="%(asctime)s %(levelname)s [%(user)s] %(message)s"
)
logger.info("Login successful", extra={"user": "alice"})Formateo diferido de cadenas
Pase los argumentos de formato por separado; no preformatee las cadenas. Así evita el coste de construir la cadena cuando el mensaje se descarta.
import logging
logger = logging.getLogger(__name__)
# BAD (always builds the string):
logger.debug(f"Processing {len(data)} items")
# GOOD (only builds if DEBUG is enabled):
logger.debug("Processing %d items", len(data))Deshabilitar el logging
Llame a logging.disable(level) para suprimir globalmente todos los mensajes hasta ese nivel; resulta útil en las pruebas.
import logging
logging.disable(logging.CRITICAL) # suppress everything
# All log calls now silently do nothing
logging.disable(logging.NOTSET) # re-enableJerarquía de loggers
Los nombres de los loggers usan puntos como separadores. Los loggers secundarios propagan los registros a los loggers principales, a menos que propagate=False.
import logging
parent = logging.getLogger("myapp")
child = logging.getLogger("myapp.database")
# child propagates to parent by default
child.warning("DB slow") # also appears in myapp's handlersEl logger raíz
El logger raíz (el de logging.warning(), etc.) es el antecesor de todos los loggers. Configúrelo con basicConfig o añadiendo handlers directamente.
import logging
root = logging.getLogger() # root logger
root.setLevel(logging.DEBUG)
handler = logging.StreamHandler()
root.addHandler(handler)Comprobación rápida
¿Qué método debe usar dentro de un bloque except para incluir automáticamente el traceback completo?
Resumen
Use loggers con nombre mediante getLogger(__name__), configúrelos con basicConfig, pase los argumentos de formato de forma diferida y use logger.exception() para los tracebacks de errores. Los loggers forman una jerarquía cuyo origen es el logger raíz.
Preguntas frecuentes
¿La lección «Conceptos básicos del módulo logging» es gratis?
Sí — el texto completo de «Conceptos básicos del módulo logging» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Python Academy, actualiza a CoddyKit PRO. El curso de Python Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Conceptos básicos del módulo logging»?
Configure loggers, establezca niveles y emita mensajes correctamente. Practicas Python Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Python Academy?
No se requiere experiencia previa. Python Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Conceptos básicos del módulo logging»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Python Academy?
Sí. Cada lección de Python Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Conceptos básicos del módulo logging
- Handlers, formatters y filtros
- Registro estructurado
- Depuración con pdb