Audit Trail

Log all tool invocations for security and debugging.

category: Tool Security
arcade.dev/patterns

Context

Any production tool system.

Problem

Without logs, you can't debug issues or detect abuse.

Solution

Comprehensive audit logging:
- What: Tool name, parameters (redacted)
- Who: User ID, session ID
- When: Timestamp
- Result: Success/failure, duration

Examples

Python
@tool
def update_record(
    context: Context,
    record_id: str,
    **updates
) -> UpdateResult:
    """Update a record with full audit trail."""
    audit_log.record(
        tool="update_record",
        user_id=context.user.id,
        session_id=context.session.id,
        parameters=redact_sensitive({"record_id": record_id, **updates}),
        timestamp=datetime.utcnow()
    )
    
    try:
        result = records_api.update(record_id, **updates)
        audit_log.record_result(success=True, duration=elapsed)
        return result
    except Exception as e:
        audit_log.record_result(success=False, error=str(e))
        raise

Considerations

  • Redact sensitive data before logging
  • Include enough context for debugging
  • Set appropriate retention periods

Related Patterns

More in Tool Security