Spaces:
Sleeping
Sleeping
| import logging | |
| from functools import wraps | |
| import sys | |
| # Configure logging: writes to file and optionally to console | |
| def setup_logger(log_file="agent.log", console: bool = True, level=logging.INFO): | |
| logger = logging.getLogger("agent_logger") | |
| logger.setLevel(level) | |
| # File handler | |
| file_handler = logging.FileHandler(log_file) | |
| file_handler.setLevel(level) | |
| file_formatter = logging.Formatter("%(asctime)s | %(levelname)s | %(message)s") | |
| file_handler.setFormatter(file_formatter) | |
| logger.addHandler(file_handler) | |
| if console: | |
| # Console handler | |
| console_handler = logging.StreamHandler(sys.stdout) | |
| console_handler.setLevel(level) | |
| console_formatter = logging.Formatter("%(asctime)s | %(levelname)s | %(message)s") | |
| console_handler.setFormatter(console_formatter) | |
| logger.addHandler(console_handler) | |
| return logger | |
| # Initialize logger (call once in your app) | |
| logger = setup_logger() | |
| def log_event(event: str, level: int = logging.INFO): | |
| """Log an event message at given level.""" | |
| logger.log(level, event) | |
| def log_function_call(func): | |
| """Decorator to log entry, exit and exceptions of a function.""" | |
| def wrapper(*args, **kwargs): | |
| logger.info(f"Started: {func.__name__}") | |
| try: | |
| result = func(*args, **kwargs) | |
| logger.info(f"Finished: {func.__name__}") | |
| return result | |
| except Exception as e: | |
| logger.error(f"Exception in {func.__name__}: {e}", exc_info=True) | |
| raise | |
| return wrapper | |