ChatDev/server/services/websocket_logger.py
2026-01-07 16:24:01 +08:00

31 lines
1.2 KiB
Python
Executable File

import asyncio
from typing import Any, Dict
from entity.enums import LogLevel, EventType
from utils.logger import WorkflowLogger, LogEntry
from utils.structured_logger import get_workflow_logger
class WebSocketLogger(WorkflowLogger):
"""Workflow logger that also pushes entries via WebSocket."""
def __init__(self, websocket_manager, session_id: str, workflow_id: str = None, log_level: LogLevel = LogLevel.DEBUG):
super().__init__(workflow_id, log_level, log_to_console=False)
self.websocket_manager = websocket_manager
self.session_id = session_id
def add_log(self, level: LogLevel, message: str = None, node_id: str = None,
event_type: EventType = None, details: Dict[str, Any] = None,
duration: float = None) -> LogEntry | None:
log_entry = super().add_log(level, message, node_id, event_type, details, duration)
if not log_entry:
return None
# Send the message using the sync method which handles event loop properly
self.websocket_manager.send_message_sync(self.session_id, {
"type": "log",
"data": log_entry.to_dict()
})
return log_entry