| import logging
|
| import logging.handlers
|
| import os
|
| from datetime import datetime
|
|
|
| def setup_logging(log_dir="logs"):
|
| """Configure logging with both file and console handlers"""
|
|
|
| if not os.path.exists(log_dir):
|
| os.makedirs(log_dir)
|
|
|
|
|
| file_formatter = logging.Formatter(
|
| '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
|
| )
|
| console_formatter = logging.Formatter(
|
| '%(levelname)s - %(message)s'
|
| )
|
|
|
|
|
|
|
| log_file = os.path.join(log_dir, f"mcp_{datetime.now().strftime('%Y%m%d')}.log")
|
| file_handler = logging.handlers.TimedRotatingFileHandler(
|
| log_file,
|
| when="midnight",
|
| interval=1,
|
| backupCount=7
|
| )
|
| file_handler.setFormatter(file_formatter)
|
| file_handler.setLevel(logging.DEBUG)
|
|
|
|
|
| console_handler = logging.StreamHandler()
|
| console_handler.setFormatter(console_formatter)
|
| console_handler.setLevel(logging.INFO)
|
|
|
|
|
| root_logger = logging.getLogger()
|
| root_logger.setLevel(logging.DEBUG)
|
|
|
|
|
| root_logger.handlers = []
|
|
|
|
|
| root_logger.addHandler(file_handler)
|
| root_logger.addHandler(console_handler)
|
|
|
|
|
| loggers = {
|
| 'server': logging.getLogger('server'),
|
| 'research': logging.getLogger('research'),
|
| 'synthesis': logging.getLogger('synthesis'),
|
| 'client': logging.getLogger('client')
|
| }
|
|
|
| for logger in loggers.values():
|
| logger.setLevel(logging.DEBUG)
|
|
|
| return loggers
|
|
|