添加 log_config.py
This commit is contained in:
122
log_config.py
Normal file
122
log_config.py
Normal file
@@ -0,0 +1,122 @@
|
||||
#!/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: Virtuos Games
|
||||
"""
|
||||
|
||||
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
|
Reference in New Issue
Block a user