Overview
The Log to debugger action is the action-chain equivalent of a console.log. It writes a line to the Pulse tab of the builder's Dev Tools window. Unlike browser console logs, each line records which block fired it, where it ran and when.


Log lines go only to the builder's Dev Tools window, in the builder and in Preview. In a published app or a mobile build, the action runs, records nothing and moves on. So you can't use it to diagnose an issue a customer reported: reproduce the issue in the builder instead.
Tip: Log to debugger is a build-time tool. The Pulse tab, where its lines appear, is part of the builder's Dev Tools and is never part of the published app. See Pulse Inspector for what the Pulse tab records.
Parameters
Field | Required | Default | Description |
|---|---|---|---|
Message | Optional | — | The text of the log line. Supports bindings. Non-text values are converted to text. Messages longer than 500 characters are cut off; put large values in Payload instead. |
Payload | Optional | — | A value to attach to the line. Bind a whole object here (for example |
Type | Optional | Info | How severe the line is: Info, Warn or Error. Any other value is logged as Info. In the action's config this field is saved as |
Dev Tools Panel
Open Dev Tools from the bottom of the builder's left rail, or press Alt+Shift+D, and switch to the Pulse tab. Each log appears as a row whose Kind is Log, showing the items below. For everything else in Dev Tools, see Dev Tools & Debugger.
The message text
The block whose event fired it
Where it ran (the app, the page, or a module)
The time
Click a row to open its details; the Payload tab shows the value from Payload. Filter by Kind to see only log rows. Lines are recorded only while the Pulse tab is open and not paused.
Step-by-Step Usage Guide
Insert a log action in your chain: In the block's Interactions section, click + (Add Interaction), choose the Event, and in Action choose Log to debugger. Place it at the point in the chain where you want to inspect state.
Set a descriptive message with binding context: Write a message that identifies what you are logging:
"After API call — userId: {{ userContext.id }}, status: {{ ds_fetchUser.status }}". This embeds the current values directly in the log string.Attach a payload for deep inspection: Set Payload to a variable or expression you want to inspect as a full JSON tree:
{{ ds_fetchUser.response }}. This avoids needing to JSON-stringify deeply nested objects into the message.Preview in Builder and check the Pulse tab: Switch to Preview mode, open Dev Tools → Pulse, then trigger the event. You should see a Log row with the message, the block that fired it and the time. Click the row to expand the Payload.
Useful Debugging Patterns
Action Chain Execution Tracing
Insert Log to debugger entries at the start, middle, and end of a long action chain with Type set to Info to create a breadcrumb trail. Compare the times to identify which step is slow.
Variable State Inspection
Before a conditional action, log the variable being evaluated: "Condition check — var_filterType: {{ var_filterType['value'] }}". This reveals whether a condition mismatch is due to an unexpected variable value.
API Response Inspection
Log the full API response immediately after a Trigger Data Source action fires its onResponse callback: set Payload to {{ ds_myApi.response }}. Expand the entry in the panel to explore the full response structure without needing a separate API client.
Examples
Basic info log with variable values
{ "actionType": "logToDebugger", "payload": { "message": "Form submitted — userId: {{ userContext.id }}, formData: {{ b_createForm.state.values }}", "level": "info" } }
Error log with full API error payload
{ "actionType": "logToDebugger", "payload": { "message": "API call failed — ds_saveRecord", "level": "error", "payload": "{{ ds_saveRecord.error }}" } }
Timing trace at start and end of chain
// Action 1: Start of chain { "actionType": "logToDebugger", "payload": { "message": "Chain started — {{ Date.now() }}", "level": "info" } } // ... other actions ... // Last action: End of chain { "actionType": "logToDebugger", "payload": { "message": "Chain complete — {{ Date.now() }}", "level": "info" } }