| """ | |
| Logging utilities for GeoBotv1 | |
| """ | |
| import logging | |
| import sys | |
| from typing import Optional | |
| def setup_logger( | |
| name: str = 'geobot', | |
| level: int = logging.INFO, | |
| log_file: Optional[str] = None | |
| ) -> logging.Logger: | |
| """ | |
| Set up logger with consistent formatting. | |
| Parameters | |
| ---------- | |
| name : str | |
| Logger name | |
| level : int | |
| Logging level | |
| log_file : str, optional | |
| Log file path | |
| Returns | |
| ------- | |
| logging.Logger | |
| Configured logger | |
| """ | |
| logger = logging.getLogger(name) | |
| logger.setLevel(level) | |
| # Console handler | |
| console_handler = logging.StreamHandler(sys.stdout) | |
| console_handler.setLevel(level) | |
| # Formatter | |
| formatter = logging.Formatter( | |
| '%(asctime)s - %(name)s - %(levelname)s - %(message)s', | |
| datefmt='%Y-%m-%d %H:%M:%S' | |
| ) | |
| console_handler.setFormatter(formatter) | |
| logger.addHandler(console_handler) | |
| # File handler if specified | |
| if log_file: | |
| file_handler = logging.FileHandler(log_file) | |
| file_handler.setLevel(level) | |
| file_handler.setFormatter(formatter) | |
| logger.addHandler(file_handler) | |
| return logger | |
| def get_logger(name: str = 'geobot') -> logging.Logger: | |
| """ | |
| Get existing logger. | |
| Parameters | |
| ---------- | |
| name : str | |
| Logger name | |
| Returns | |
| ------- | |
| logging.Logger | |
| Logger instance | |
| """ | |
| return logging.getLogger(name) | |