Skip to content

Console Telemetry — vyuh_server_plugin_telemetry_console

TelemetryPlugin backed by a ConsoleTelemetrySink. Emits one JSON line per span, counter, or event to a configurable IOSink (defaults to stdout). The right sink for dev and tests.

Install

yaml
dependencies:
  vyuh_server_plugin_telemetry_console:
    hosted: https://pub.vyuh.tech
    version: ^0.1.0

Wiring

dart
import 'package:vyuh_server/vyuh_server.dart';
import 'package:vyuh_server_plugin_telemetry_console/vyuh_server_plugin_telemetry_console.dart';

final runtime = await VyuhServer.bootstrap(
  plugins: [
    ConsoleTelemetryPlugin(),
  ],
);

vyuh.telemetry is now a ConsoleTelemetrySink. Every call prints one JSON line:

{"kind":"span","name":"catalog.list","duration_ms":12,"attrs":{"tenant_id":"acme"}}
{"kind":"counter","name":"orders.listed","delta":42}
{"kind":"event","name":"order.created","attrs":{"id":"abc-123"}}

Redirecting Output

Capture output to a buffer in tests:

dart
final lines = <String>[];

await VyuhServer.bootstrap(
  plugins: [
    ConsoleTelemetryPlugin(write: lines.add),
  ],
);

// run some test calls

expect(lines, contains(predicate((line) =>
  line is String && line.contains('"name":"catalog.list"'),
)));

Or to a file:

dart
final file = File('telemetry.jsonl').openWrite();

ConsoleTelemetryPlugin(write: file.writeln);

Counters and Events

dart
// Increment a counter
vyuh.telemetry.counter('orders.created', delta: 1, attrs: {
  'tenant_id': tenantId,
  'total_cents': totalCents,
});

// Emit a point-in-time event
vyuh.telemetry.event('order.canceled', attrs: {
  'order_id': orderId,
  'reason': 'customer_request',
});

Both shapes appear in the JSON line stream — pipe | grep | jq is your dev-side dashboard.

Switching to OTel in Production

dart
plugins: [
  PostgresDbPlugin(),
  if (isProd)
    OtelTelemetryPlugin(defaultServiceName: 'saas-api')
  else
    ConsoleTelemetryPlugin(),
],

Handlers don't change. vyuh.telemetry.startSpan(...) keeps the same shape. See OTel Telemetry for production setup.

Where to Go Next