Spaces:
Runtime error
Runtime error
| import logging | |
| from pathlib import Path | |
| from gradio_log import Log | |
| AGENT_LOG_FILES = { | |
| "ensemble_monitor": "./agent_logs/ensemble_monitor.log", | |
| "weight_optimization": "./agent_logs/weight_optimization.log", | |
| "system_health": "./agent_logs/system_health.log", | |
| "context_intelligence": "./agent_logs/context_intelligence.log", | |
| "forensic_anomaly_detection": "./agent_logs/forensic_anomaly_detection.log", | |
| } | |
| class CustomFormatter(logging.Formatter): | |
| green = "\x1b[32;20m" | |
| blue = "\x1b[34;20m" | |
| yellow = "\x1b[33;20m" | |
| red = "\x1b[31;20m" | |
| bold_red = "\x1b[31;1m" | |
| reset = "\x1b[0m" | |
| format = "%(asctime)s - %(levelname)s - %(message)s (%(filename)s:%(lineno)d)" | |
| FORMATS = { | |
| logging.DEBUG: blue + format + reset, | |
| logging.INFO: green + format + reset, | |
| logging.WARNING: yellow + format + reset, | |
| logging.ERROR: red + format + reset, | |
| logging.CRITICAL: bold_red + format + reset, | |
| } | |
| def format(self, record): | |
| log_fmt = self.FORMATS.get(record.levelno) | |
| formatter = logging.Formatter(log_fmt) | |
| return formatter.format(record) | |
| class AgentLogger: | |
| def __init__(self, agent_log_files=None): | |
| self.agent_log_files = agent_log_files or AGENT_LOG_FILES | |
| self.loggers = {} | |
| self._setup_loggers() | |
| def _setup_loggers(self): | |
| # Import CustomFormatter from app.py or define it here if needed | |
| try: | |
| custom_formatter = CustomFormatter() | |
| except ImportError: | |
| # Fallback: use default formatter if CustomFormatter is not available | |
| custom_formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s (%(filename)s:%(lineno)d)") | |
| for agent, log_file in self.agent_log_files.items(): | |
| Path(log_file).parent.mkdir(parents=True, exist_ok=True) | |
| Path(log_file).touch(exist_ok=True) | |
| logger = logging.getLogger(f"agent_log.{agent}") | |
| logger.setLevel(logging.DEBUG) | |
| # Remove existing handlers to avoid duplicate logs | |
| for handler in logger.handlers: | |
| logger.removeHandler(handler) | |
| handler = logging.FileHandler(log_file) | |
| handler.setLevel(logging.DEBUG) | |
| handler.setFormatter(custom_formatter) | |
| logger.addHandler(handler) | |
| self.loggers[agent] = logger | |
| def log(self, agent, level, message): | |
| logger = self.loggers.get(agent) | |
| if logger: | |
| getattr(logger, level)(message) | |
| else: | |
| raise ValueError(f"No logger found for agent: {agent}") | |
| def get_log_file(self, agent): | |
| return self.agent_log_files.get(agent) | |
| # Usage Example: | |
| # agent_logger = AgentLogger() | |
| # agent_logger.log("ensemble_monitor", "info", "Ensemble monitoring started.") | |
| # log_file_path = agent_logger.get_log_file("ensemble_monitor") | |