0Pricing
Python Academy · Lección

Registro estructurado

Emita registros con formato JSON para obtener una salida legible por máquinas.

Registro estructurado es una lección gratuita de Python Academy en CoddyKit. Esta es la lección 3 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.

¿Qué es el logging estructurado?

El logging estructurado emite los registros como datos legibles por máquinas (JSON) en lugar de texto libre, lo que facilita indexarlos, buscarlos y generar alertas.

import logging, json

def log_json(level, msg, **kw):
    record = {"level": level, "msg": msg, **kw}
    print(json.dumps(record))

log_json("INFO", "Request received", path="/api/users", method="GET")

Formatter JSON personalizado

Herede de logging.Formatter para emitir JSON en lugar de texto sin formato.

import logging, json

class JSONFormatter(logging.Formatter):
    def format(self, record):
        return json.dumps({
            "time": self.formatTime(record),
            "level": record.levelname,
            "name": record.name,
            "msg": record.getMessage(),
        })

handler = logging.StreamHandler()
handler.setFormatter(JSONFormatter())
logging.getLogger().addHandler(handler)

python-json-logger

El paquete python-json-logger proporciona un formatter JSON listo para usar, con campos estándar y adicionales.

# pip install python-json-logger
import logging
from pythonjsonlogger import jsonlogger

logger = logging.getLogger()
handler = logging.StreamHandler()
handler.setFormatter(jsonlogger.JsonFormatter())
logger.addHandler(handler)
logger.info("User created", extra={"user_id": 42})

structlog

structlog es una biblioteca de terceros popular que separa la acumulación del contexto del formateo y admite pipelines de procesadores.

# pip install structlog
import structlog

log = structlog.get_logger()
log = log.bind(request_id="abc123")
log.info("payment_processed", amount=49.99, currency="USD")

Asociar contexto con structlog

structlog permite asociar pares clave-valor a un logger que los conserva en todas las llamadas posteriores.

import structlog

log = structlog.get_logger().bind(
    service="auth",
    env="prod"
)
log.warning("login_failed", user="alice", reason="bad_password")
# {service:auth, env:prod, user:alice, reason:bad_password}

Añadir marcas de tiempo e información del llamador

Los procesadores pueden enriquecer los registros automáticamente. Añada TimeStamper y CallsiteParameterAdder a cada registro de log.

import structlog

structlog.configure(
    processors=[
        structlog.processors.TimeStamper(fmt="iso"),
        structlog.processors.CallsiteParameterAdder([structlog.processors.CallsiteParameter.FILENAME]),
        structlog.processors.JSONRenderer(),
    ]
)

Registrar IDs de solicitud en aplicaciones web

En un framework web, asocie un ID de solicitud al principio de cada solicitud para que todas las líneas de log de esa solicitud lo incluyan.

import structlog

def middleware(request, call_next):
    req_id = request.headers.get("X-Request-Id", generate_id())
    log = structlog.get_logger().bind(request_id=req_id)
    log.info("request_started", path=request.url.path)
    response = call_next(request)
    log.info("request_finished", status=response.status_code)
    return response

Formato de log ECS

Elastic Common Schema (ECS) es un formato estándar de logs JSON utilizado por Elastic Stack. Use ecs-logging para Python.

# pip install ecs-logging
import logging
import ecs_logging

logger = logging.getLogger("app")
handler = logging.StreamHandler()
handler.setFormatter(ecs_logging.StdlibFormatter())
logger.addHandler(handler)
logger.info("Event logged in ECS format")

Sistemas de agregación de logs

Los logs JSON estructurados se integran de forma natural con herramientas de agregación: Elasticsearch/Kibana (ELK), Grafana Loki, Datadog y AWS CloudWatch Logs Insights.

# Loki query example:
# {app="myservice"} | json | level="ERROR"

# CloudWatch Insights:
# fields @timestamp, level, msg
# | filter level = "ERROR"
# | sort @timestamp desc

Evitar PII en los logs

Elimine la información de identificación personal antes de registrarla. Use un procesador o filtro personalizado para enmascarar correos electrónicos, tokens y contraseñas.

import re

def mask_pii(_, __, event_dict):
    msg = event_dict.get("event", "")
    event_dict["event"] = re.sub(
        r"[\w.+-]+@[\w-]+\.[\w.]+", "***@***.***", msg
    )
    return event_dict

Ventajas y desventajas del logging estructurado y no estructurado

Los logs estructurados permiten buscar y generar alertas, pero son más verbosos. Combine el logging estructurado en producción con un formato legible para las personas durante el desarrollo mediante una configuración basada en el entorno.

import structlog, os

if os.getenv("ENV") == "production":
    renderer = structlog.processors.JSONRenderer()
else:
    renderer = structlog.dev.ConsoleRenderer()

structlog.configure(processors=[renderer])

Comprobación rápida

¿Cuál es la principal ventaja de los logs estructurados en JSON frente a los logs de texto sin formato?

Resumen

El logging estructurado emite registros JSON de tipo clave-valor. Use un JSONFormatter, python-json-logger o structlog. Asocie el contexto (ID de solicitud, usuario) al principio de una operación para que todas las líneas de log de esa operación lo conserven.

Preguntas frecuentes

¿La lección «Registro estructurado» es gratis?

Sí — el texto completo de «Registro estructurado» 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 «Registro estructurado»?

Emita registros con formato JSON para obtener una salida legible por máquinas. 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 3 de 4.

¿Cuánto tiempo toma la lección «Registro estructurado»?

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

  1. Conceptos básicos del módulo logging
  2. Handlers, formatters y filtros
  3. Registro estructurado
  4. Depuración con pdb
← Volver a Python Academy