Files
Maya_MCP/log_config.py
2025-04-16 19:51:26 +08:00

123 lines
3.2 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Maya MCP Logging Configuration
This module provides centralized logging configuration for the Maya MCP server.
Version: 1.0.0
Author: Jeffrey Tsai
"""
import os
import sys
import logging
import datetime
from logging.handlers import RotatingFileHandler
# Global variables
_log_initialized = False
_root_logger = None
_log_file = None
def initialize_logging(log_to_file=True, log_level=logging.INFO):
"""
Initialize logging configuration
Args:
log_to_file (bool): Whether to log to file
log_level (int): Logging level
Returns:
logging.Logger: Root logger
"""
global _log_initialized, _root_logger, _log_file
if _log_initialized:
return _root_logger
# Create root logger
_root_logger = logging.getLogger("MayaMCP")
_root_logger.setLevel(log_level)
# Create console handler
console_handler = logging.StreamHandler()
console_handler.setLevel(log_level)
# Create formatter
formatter = logging.Formatter(
'%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
# Set formatter for console handler
console_handler.setFormatter(formatter)
# Add console handler to root logger
_root_logger.addHandler(console_handler)
# Add file handler if requested
if log_to_file:
try:
# Get user home directory
home_dir = os.path.expanduser("~")
# Create logs directory if it doesn't exist
logs_dir = os.path.join(home_dir, ".maya", "mcp_logs")
if not os.path.exists(logs_dir):
os.makedirs(logs_dir)
# Create log file path with timestamp
timestamp = datetime.datetime.now().strftime("%Y%m%d")
_log_file = os.path.join(logs_dir, f"mcp_{timestamp}.log")
# Create rotating file handler (10 MB max size, keep 5 backups)
file_handler = RotatingFileHandler(
_log_file,
maxBytes=10*1024*1024, # 10 MB
backupCount=5
)
file_handler.setLevel(log_level)
file_handler.setFormatter(formatter)
# Add file handler to root logger
_root_logger.addHandler(file_handler)
_root_logger.info(f"Log file created at: {_log_file}")
except Exception as e:
_root_logger.error(f"Failed to create log file: {e}")
_log_initialized = True
# Log system info
_root_logger.info(f"Python version: {sys.version}")
_root_logger.info(f"Platform: {sys.platform}")
return _root_logger
def get_logger(name):
"""
Get logger for a specific module
Args:
name (str): Module name
Returns:
logging.Logger: Logger for the module
"""
global _log_initialized, _root_logger
if not _log_initialized:
initialize_logging()
return logging.getLogger(f"MayaMCP.{name}")
def get_log_file():
"""
Get current log file path
Returns:
str: Log file path
"""
global _log_file
return _log_file