Flow Studio
Log Streaming Overview
Node execution logs are pushed from the backend to the Observer Panel in real time via SignalR. The server buffers log entries before sending to reduce overhead. The client appends idempotently via logId deduplication. Past runs stream from a REST API using the same display path.
Push vs. Pull
| Scenario | Transport | Latency |
|---|---|---|
| Live run (in progress) | SignalR push (NodeLogEmitted) | Near-realtime (buffer flush interval) |
| Past run (historical) | REST pull (GET /logs, paginated) | On-demand load |
End-to-End Flow
1
Executor calls ctx.Observability.Logger.LogInformation(...)
2
SignalRLogSink receives the log entry
Adds pre-seeded fields (nodeId, executionId, tenantId, traceId)
3
Server-side buffer accumulates entries
Flushes at interval or when buffer reaches N entries
4
ExecutionHub sends NodeLogEmitted to client group
Payload: LogEntry[] (batch for efficiency)
5
Client appends to executionStore.logs[]
Deduplication by logId. Logs tab re-renders via virtual scroller.