import functools import logging import traceback logger = logging.getLogger("tool_logger") logger.setLevel(logging.INFO) def log_tool_entry(func): @functools.wraps(func) def wrapper(*args, **kwargs): # Clean up args/kwargs for cleaner logging (optional: truncate long strings) clean_args = [str(a)[:100] + "..." if isinstance(a, str) and len(a) > 100 else a for a in args] clean_kwargs = {k: (str(v)[:100] + "..." if isinstance(v, str) and len(v) > 100 else v) for k, v in kwargs.items()} logger.info(f"🛠️ Tool Invoked: {func.__name__} | Args: {clean_args} | Kwargs: {clean_kwargs}") try: result = func(*args, **kwargs) return result except Exception as e: tb = traceback.format_exc() logger.error(f"❌ Tool Failed: {func.__name__} | Error: {e}\nTraceback:\n{tb}") raise return wrapper