Overview
The Log is CXF’s audit trail. It automatically records who did what to which record — creations, updates (with field-level before/after diffs), deletions, restores, and changes to taxonomies, relationships, and ownership. You read that history on a record’s Log tab, in a real-time feed, and through the API. For the mental model, see Core concepts. Logs are written by the system — you don’t create them, you read them.Where to find it
- Log tab — on a record’s detail page, a timeline of everything that happened to it.
- Real-time feed — a navbar feed shows recent changes as they happen.
- API — query the log history programmatically.
Properties
Every log entry is system-generated and read-only:| Property | Type | Description |
|---|---|---|
user_id | reference | The user who performed the action. |
action | enum | What happened — see What gets logged. |
action_details | array | The per-change details (empty for deletions and restores). |
object_type / object_id | reference | The record that was changed. |
object_title | string | A snapshot of the record’s title at the time. |
connection_details | object | Where the action came from: ip, user_agent, device_type. |
created_at | datetime | When the action happened. |
What gets logged
Theaction captures the kind of change: created, updated, deleted,
restored, attached, detached, archived, published, unpublished,
balance-updated, login, and more.
For changes, action_details records exactly what changed, with typed entries:
| Type | Records |
|---|---|
attribute | A field change — slug, old_value, new_value (nested fields use a dotted slug). |
taxonomy | A taxonomy attached or removed. |
relationship | A relationship attached or removed. |
ownership | An owner or follower added or removed. |
balance | A balance change — old and new value. |
Real-time feed
Owners and followers of a record see its changes in the navbar feed in real time. The feed is ownership-scoped — a Journey Manager sees activity for the records they own or follow (see Ownership).Behaviour & rules
- Read-only. Logs are generated automatically by the system; they can’t be created or edited.
- Field-level diffs. Updates record only the fields that changed, each as
old_value → new_value, including nested fields. - Deletes and restores have no details. Their
action_detailsis empty — use the surroundingupdatedentries for field history. - Secrets are masked. Sensitive values (like API keys) are masked so they never appear in a log.
- The real actor is attributed. Even when a change happens through automation or a background job, the log attributes it to the user behind it.
Seeds
Logs are a record of actions, not configuration — they aren’t part of Seeds.Governance & permissions
A super admin or Master can read every log. A Journey Manager reads the logs of records they own or follow.API access
The Log is read-only through the API: list and filter entries (for example by object), optionally scoped to the records a user owns or follows. See the API reference.Related
Ownership
Determines who sees a record’s log in the real-time feed.
Activities
User-authored comments, tasks, and approvals — a separate stream from the audit trail.