Spaces:
Runtime error
Runtime error
| import logging | |
| import logging.config | |
| from pathlib import Path | |
| from typing import Optional | |
| def setup_logging( | |
| log_level: str = "INFO", | |
| log_file: Optional[str] = None, | |
| log_format: Optional[str] = None | |
| ) -> None: | |
| """ | |
| Set up logging configuration for the Pokemon agent project. | |
| Args: | |
| log_level: Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL) | |
| log_file: Optional file path to write logs to | |
| log_format: Optional custom log format | |
| """ | |
| if log_format is None: | |
| log_format = "%(asctime)s - %(name)s - %(levelname)s - %(message)s" | |
| # Create logs directory if logging to file | |
| if log_file: | |
| log_path = Path(log_file) | |
| log_path.parent.mkdir(parents=True, exist_ok=True) | |
| # Configure logging | |
| config = { | |
| "version": 1, | |
| "disable_existing_loggers": False, | |
| "formatters": { | |
| "standard": { | |
| "format": log_format, | |
| "datefmt": "%Y-%m-%d %H:%M:%S" | |
| }, | |
| "detailed": { | |
| "format": "%(asctime)s - %(name)s - %(levelname)s - %(funcName)s:%(lineno)d - %(message)s", | |
| "datefmt": "%Y-%m-%d %H:%M:%S" | |
| } | |
| }, | |
| "handlers": { | |
| "console": { | |
| "class": "logging.StreamHandler", | |
| "level": log_level, | |
| "formatter": "standard", | |
| "stream": "ext://sys.stdout" | |
| } | |
| }, | |
| "loggers": { | |
| "agent": { | |
| "level": log_level, | |
| "handlers": ["console"], | |
| "propagate": True | |
| }, | |
| "langgraph": { | |
| "level": "WARNING", | |
| "handlers": ["console"], | |
| "propagate": False | |
| }, | |
| "langchain": { | |
| "level": "WARNING", | |
| "handlers": ["console"], | |
| "propagate": False | |
| } | |
| }, | |
| "root": { | |
| "level": log_level, | |
| "handlers": ["console"] | |
| } | |
| } | |
| # Add file handler if log_file is specified | |
| if log_file: | |
| config["handlers"]["file"] = { | |
| "class": "logging.handlers.RotatingFileHandler", | |
| "level": log_level, | |
| "formatter": "detailed", | |
| "filename": log_file, | |
| "maxBytes": 10485760, # 10MB | |
| "backupCount": 5, | |
| "encoding": "utf-8" | |
| } | |
| # Add file handler to all loggers | |
| config["loggers"]["agent"]["handlers"].append("file") | |
| # Add specific configuration for __main__ case | |
| config["loggers"]["agent.__main__"] = { | |
| "level": log_level, | |
| "handlers": ["console", "file"], | |
| "propagate": False | |
| } | |
| config["root"]["handlers"].append("file") | |
| logging.config.dictConfig(config) | |
| def get_logger(name: str) -> logging.Logger: | |
| """ | |
| Get a logger instance for a specific module. | |
| Args: | |
| name: Logger name (typically __name__) | |
| Returns: | |
| Configured logger instance | |
| """ | |
| return logging.getLogger(f"pokemon_agent.{name}") |