|
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): |
|
|
|
try: |
|
custom_formatter = CustomFormatter() |
|
except ImportError: |
|
|
|
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) |
|
|
|
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) |
|
|
|
|
|
|
|
|
|
|
|
|