Flow Studio
Per-Node Log Streaming
All log events arrive on the single execution subscription, but subscribeToNodeStream() provides a filtered view — delivering only the logs for a specific node. This powers the Logs tab's "Filter by Node" feature and the Node Inspector's log section.
subscribeToNodeStream()
// Available on the useExecutionSignalR hook return
const { subscribeToNodeStream, unsubscribeFromNodeStream } = useExecutionSignalR(executionId);
// Subscribe to logs for a specific node
const unsubscribe = subscribeToNodeStream('node-httpReq1', (log) => {
console.log(`[${log.level.toUpperCase()}] ${log.message}`);
appendToNodeLogBuffer(log);
});
// Cleanup when component unmounts or node changes
return () => unsubscribe();
Log Buffering
All incoming NodeLogEmitted events are buffered in memory in the flowObserverPanelStore. The buffer is:
- Capped at 10,000 entries per execution (oldest entries are dropped when the cap is reached)
- Persisted for the duration of the browser session — logs from earlier in the execution are still available even if you opened the Observer Panel late
- Cleared when a new execution starts
Real-Time Log Architecture
1
Executor Logs
Backend executor calls ctx.Logger.LogInformation("message", data)
2
SignalR Emit
Log provider intercepts the log entry and emits NodeLogEmitted to the execution group
3
Client Receives
useExecutionSignalR handler receives the event and dispatches to all subscribeToNodeStream listeners
4
Logs Tab Updates
New log entry appended to virtual scroll list. Sanitization runs before display.