elsa-core/src/modules/Elsa.Diagnostics.ConsoleLogs
Sipke Schoorstra 43108c2e48
Add diagnostics console logs (#7462)
* feat: add diagnostics console logs

* test: avoid secret-like redaction fixtures

* fix: address console logs review feedback

* fix: harden console log capture lifecycle

* fix: report console log drop summaries

* fix: address diagnostics review cleanups
2026-05-18 02:16:46 +02:00
..
Contracts Add diagnostics console logs (#7462) 2026-05-18 02:16:46 +02:00
Endpoints/ConsoleLogs Add diagnostics console logs (#7462) 2026-05-18 02:16:46 +02:00
Extensions Add diagnostics console logs (#7462) 2026-05-18 02:16:46 +02:00
Features Add diagnostics console logs (#7462) 2026-05-18 02:16:46 +02:00
Models Add diagnostics console logs (#7462) 2026-05-18 02:16:46 +02:00
Options Add diagnostics console logs (#7462) 2026-05-18 02:16:46 +02:00
Permissions Add diagnostics console logs (#7462) 2026-05-18 02:16:46 +02:00
Providers/InMemory Add diagnostics console logs (#7462) 2026-05-18 02:16:46 +02:00
RealTime Add diagnostics console logs (#7462) 2026-05-18 02:16:46 +02:00
Services Add diagnostics console logs (#7462) 2026-05-18 02:16:46 +02:00
ShellFeatures Add diagnostics console logs (#7462) 2026-05-18 02:16:46 +02:00
Elsa.Diagnostics.ConsoleLogs.csproj Add diagnostics console logs (#7462) 2026-05-18 02:16:46 +02:00
FodyWeavers.xml Add diagnostics console logs (#7462) 2026-05-18 02:16:46 +02:00
README.md Add diagnostics console logs (#7462) 2026-05-18 02:16:46 +02:00
Usings.cs Add diagnostics console logs (#7462) 2026-05-18 02:16:46 +02:00

Elsa Diagnostics Console Logs

Elsa.Diagnostics.ConsoleLogs is an opt-in Core module for operational diagnostics. It captures raw backend stdout and stderr lines, preserves the host's original console destinations, redacts data before provider boundaries, and exposes recent plus live console output to authorized callers.

What It Captures

  • Raw stdout and stderr lines from the current backend process.
  • Source metadata for the current process, machine, and container environment when available.
  • Recent bounded history and live SignalR events.
  • Dropped-line summaries when recent buffers or subscriber queues overflow.

The module is separate from Elsa.Diagnostics.StructuredLogs. It does not parse ILogger records, provide durable audit storage, call orchestrator log APIs, or implement trace/metric exploration.

Configure

services.AddElsa(elsa =>
{
    elsa.UseConsoleLogs(options =>
    {
        options.RecentLogCapacity = 5_000;
        options.SubscriberChannelCapacity = 1_000;
        options.MaxRecentQuerySize = 1_000;
        options.MaxLineLength = 16_384;
        options.StripAnsiEscapeSequences = true;
    });
});

Map the live hub:

app.UseConsoleLogs();

Contracts

  • Recent lines: POST /diagnostics/console-logs/recent
  • Sources: GET /diagnostics/console-logs/sources
  • Live hub: /elsa/hubs/diagnostics/console-logs
  • Permission: read:diagnostics:console-logs

Recent, source, and hub access all require the same permission.

Safety Boundaries

  • Redaction runs before recent buffering, live streaming, endpoint responses, and provider storage.
  • ANSI escape sequences are stripped by default.
  • Partial writes are buffered until newline, max line length, or idle flush.
  • Oversized lines are truncated to one event and marked as truncated.
  • Providers receive only redacted line text and redacted source metadata.