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.0Wiring
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
- OTel Telemetry — production tracing
vyuh.telemetry— the typed verb