‎
loginstudio
  • Overview
  • COMIENZA
    • Quickstart
  • Basicos
    • Modelos Disponibles
    • TEXT API (NEW)
    • TEXT API (ACTUAL)
    • Formas de pago
  • Mejores prácticas
    • RAG
    • Prompteo
  • Saptiva Agents
    • Introducción
    • Instalación
    • Quick Start
    • Tutorial
      • Modelos
      • Mensajes
      • Agentes
      • Equipos
      • Human-in-the-Loop
      • Terminación
      • Manejo De Estados
    • Avanzado
      • Agentes Personalizados
      • Selector Group Chat
      • Memoria
      • Logging
      • Serialización
    • Conceptos Del Núcleo
      • Quick Start
      • Aplicaciones De Agentes & Multi-Agentes
      • Entornos De Ejecución Para Agentes
      • Pila De Aplicación
      • Identidad & Ciclo De Vida Del Agente
      • Tema & Suscripción (Topic & Subscription)
    • Guía De Framework
      • Agente & Entorno De Ejecución De Agentes
      • Mensaje & Comunicación
      • Open Telemetry
    • Guía De Componentes
      • Cliente De Modelo
      • Contexto De Modelo
      • Herramientas (Tools)
    • Patrones De Diseño Multi-Agente
      • Agentes Concurrentes
      • Flujo de Trabajo Secuencial
      • Transferencia De Tareas (Handoffs)
      • Mezcla De Agentes (Mixture Of Agents)
      • Multi-Agent Debate
      • Reflexión (Reflection)
    • Ejemplos
      • Planificación De Viajes
      • Investigación De Empresas
      • Revisión De Literatura
    • PyPi
  • Manuales
  • Model cards
    • Quickstart
      • Model Card: DeepSeek R1 Lite
      • Model Card: LLAMA3.3 70B
      • Model Card: Saptiva Turbo
      • Model Card: Phi 4
      • Model Card: Qwen
      • Model Card: Gemma 3
  • DEFINICIONES
    • Temperature
Con tecnología de GitBook
En esta página
  • Habilitar Salida de Logs
  • Logging Estructurado
  • Emitir Logs
  • Emitir Logs Estructurados
  1. Saptiva Agents
  2. Avanzado

Logging

AnteriorMemoriaSiguienteSerialización

Última actualización hace 29 días

Saptiva-Agents utiliza el módulo de registro () incorporado en Python.

Hay dos tipos de registro (logging):

  • Registro de seguimiento (trace logging): Se utiliza para depuración y son mensajes legibles por humanos que indican lo que está sucediendo. Está destinado a que un desarrollador entienda lo que ocurre en el código. El contenido y formato de estos logs no deben ser usados por otros sistemas.

    • Nombre: TRACE_LOGGER_NAME

  • Registro estructurado (structured logging): Este logger emite eventos estructurados que pueden ser consumidos por otros sistemas. El contenido y formato de estos logs sí deben ser considerados por otros sistemas.

    • Nombre: EVENT_LOGGER_NAME

ROOT_LOGGER_NAME puede utilizarse para habilitar o deshabilitar todos los logs.


Habilitar Salida de Logs

Para habilitar el registro de seguimiento, puedes utilizar el siguiente código:

import logging
from saptiva_agents.core import TRACE_LOGGER_NAME

# Configura el nivel de logging general
logging.basicConfig(level=logging.WARNING)

# Obtiene el logger de trazas
logger = logging.getLogger(TRACE_LOGGER_NAME)

# Agrega un manejador para imprimir en consola
logger.addHandler(logging.StreamHandler())

# Establece el nivel de trazas en DEBUG
logger.setLevel(logging.DEBUG)

Para habilitar el logging estructurado, puedes usar el siguiente código:

import logging
from saptiva_agents.core import EVENT_LOGGER_NAME

# Configura el nivel de logging general
logging.basicConfig(level=logging.WARNING)

# Obtiene el logger de eventos estructurados
logger = logging.getLogger(EVENT_LOGGER_NAME)

# Agrega un manejador para imprimir en consola
logger.addHandler(logging.StreamHandler())

# Establece el nivel de eventos estructurados en INFO
logger.setLevel(logging.INFO)

Logging Estructurado

El logging estructurado permite escribir lógica que maneje los eventos reales con todos sus campos, en lugar de solo una cadena de texto formateada.

Por ejemplo, si definimos un evento personalizado y lo emitimos, podemos escribir el siguiente manejador:

import logging
from dataclasses import dataclass

@dataclass
class MyEvent:
    timestamp: str
    message: str

class MyHandler(logging.Handler):
    def __init__(self) -> None:
        super().__init__()

    def emit(self, record: logging.LogRecord) -> None:
        try:
            # Usa StructuredMessage si el mensaje es una instancia del evento personalizado
            if isinstance(record.msg, MyEvent):
                print(f"Timestamp: {record.msg.timestamp}, Message: {record.msg.message}")
        except Exception:
            self.handleError(record)

Y así es como puedes usarlo:

logger = logging.getLogger(EVENT_LOGGER_NAME)
logger.setLevel(logging.INFO)
my_handler = MyHandler()
logger.handlers = [my_handler]

Emitir Logs

Los nombres anteriores (TRACE_LOGGER_NAME y EVENT_LOGGER_NAME) son los loggers raíz para cada tipo. El código que emite logs debe usar un logger hijo de estos. Por ejemplo, si estás escribiendo un módulo my_module y quieres emitir logs de trazas, puedes hacer lo siguiente:

import logging
from saptiva_agents.core import TRACE_LOGGER_NAME

# Logger para trazas dentro del módulo my_module
logger = logging.getLogger(f"{TRACE_LOGGER_NAME}.my_module")

Emitir Logs Estructurados

Si tu evento es un dataclass, puedes emitirlo así:

import logging
from dataclasses import dataclass
from saptiva_agents.core import EVENT_LOGGER_NAME

@dataclass
class MyEvent:
    timestamp: str
    message: str

logger = logging.getLogger(EVENT_LOGGER_NAME + ".my_module")
logger.info(MyEvent("timestamp", "message"))
logging