Vali-Mediator.Observability
1.1.0
dotnet add package Vali-Mediator.Observability --version 1.1.0
NuGet\Install-Package Vali-Mediator.Observability -Version 1.1.0
<PackageReference Include="Vali-Mediator.Observability" Version="1.1.0" />
<PackageVersion Include="Vali-Mediator.Observability" Version="1.1.0" />
<PackageReference Include="Vali-Mediator.Observability" />
paket add Vali-Mediator.Observability --version 1.1.0
#r "nuget: Vali-Mediator.Observability, 1.1.0"
#:package Vali-Mediator.Observability@1.1.0
#addin nuget:?package=Vali-Mediator.Observability&version=1.1.0
#tool nuget:?package=Vali-Mediator.Observability&version=1.1.0
Vali-Mediator.Observability
Zero-dependency observability integration for Vali-Mediator (.NET 7 / 8 / 9).
Provides OpenTelemetry-compatible ActivitySource tracing, pluggable metrics via IMetricsCollector, and structured per-request lifecycle hooks via IRequestObserver — with no OpenTelemetry SDK dependency required.
Installation
dotnet add package Vali-Mediator.Observability
Quick Start
// Program.cs
builder.Services.AddValiMediator(config =>
{
config.RegisterServicesFromAssemblyContaining<Program>();
config.AddObservabilityBehavior(); // registers both request + dispatch behaviors
});
builder.Services
.AddObservability() // registers NoOpMetricsCollector (replace below)
.AddConsoleMetrics() // replace with ConsoleMetricsCollector (dev only)
.AddConsoleLoggingObserver(); // add ConsoleLoggingObserver (dev only)
Features
| Feature | API |
|---|---|
| OpenTelemetry-compatible tracing | ValiMediatorDiagnostics.ActivitySource — source name "Vali-Mediator" |
| Request lifecycle hooks | IRequestObserver — OnStarted, OnCompleted, OnFailed |
| Rich execution context | ObservabilityContext — name, operationId, duration, success, exception, request, response, tags |
| Pluggable metrics | IMetricsCollector — RecordRequestStarted, RecordRequestCompleted, RecordRequestFailed |
| No-op default | NoOpMetricsCollector — zero overhead when no metrics back-end is configured |
| Console output | ConsoleMetricsCollector + ConsoleLoggingObserver for dev/debug |
| IRequest pipeline | ObservabilityBehavior<TRequest, TResponse> |
| IDispatch pipeline | ObservabilityDispatchBehavior<TRequest> (INotification / IFireAndForget) |
| Multiple observers | All observers always run; exceptions collected into AggregateException |
| Fluent DI | AddObservabilityBehavior, AddObservability, AddMetricsCollector<T>, AddRequestObserver<T>, AddConsoleMetrics, AddConsoleLoggingObserver |
OpenTelemetry Integration
No additional packages required inside this library. To enable tracing, add the source to your OpenTelemetry tracer provider:
builder.Services.AddOpenTelemetry()
.WithTracing(b => b
.AddSource("Vali-Mediator")
.AddOtlpExporter());
Custom Metrics Collector
Implement IMetricsCollector and register it:
public sealed class PrometheusMetricsCollector : IMetricsCollector
{
private static readonly Counter RequestsStarted =
Metrics.CreateCounter("vali_mediator_requests_started_total", "Total started requests", "request");
public void RecordRequestStarted(string requestName) =>
RequestsStarted.WithLabels(requestName).Inc();
public void RecordRequestCompleted(string requestName, TimeSpan duration, bool success) { /* ... */ }
public void RecordRequestFailed(string requestName, TimeSpan duration, string exceptionType) { /* ... */ }
}
// Registration:
builder.Services
.AddObservability()
.AddMetricsCollector<PrometheusMetricsCollector>();
Custom Observer
public sealed class AuditObserver : IRequestObserver
{
private readonly IAuditService _audit;
public AuditObserver(IAuditService audit) => _audit = audit;
public Task OnStarted(ObservabilityContext ctx, CancellationToken ct = default) =>
_audit.LogStartAsync(ctx.RequestName, ctx.OperationId, ct);
public Task OnCompleted(ObservabilityContext ctx, CancellationToken ct = default) =>
_audit.LogCompletedAsync(ctx.RequestName, ctx.Duration, ct);
public Task OnFailed(ObservabilityContext ctx, CancellationToken ct = default) =>
_audit.LogFailedAsync(ctx.RequestName, ctx.Exception, ct);
}
// Registration (multiple observers supported):
builder.Services.AddRequestObserver<AuditObserver>();
ObservabilityContext Properties
| Property | Type | Description |
|---|---|---|
RequestName |
string |
typeof(TRequest).Name |
OperationId |
string? |
Unique Guid per execution |
StartedAt |
DateTimeOffset |
UTC start timestamp |
Duration |
TimeSpan? |
Set after handler returns |
IsSuccess |
bool |
true on success |
Exception |
Exception? |
Set on failure |
Request |
object? |
The original request object |
Response |
object? |
The response (set on success) |
Tags |
Dictionary<string, object?> |
Extensible metadata bag |
Donations
If Vali-Mediator is useful to you, consider supporting its development:
- Latin America — MercadoPago
- International — PayPal
License
Contributions
Issues and pull requests are welcome on GitHub.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net7.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 7.0.0)
- Vali-Mediator (>= 2.0.0)
-
net8.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 7.0.0)
- Vali-Mediator (>= 2.0.0)
-
net9.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 7.0.0)
- Vali-Mediator (>= 2.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
v1.1.0 — Package structure: now uses Vali-Mediator as NuGet dependency instead of local ProjectReference.
v1.0.1 — Documentation: enabled XML documentation file for full IntelliSense support.
v1.0.0 — Initial release:
- ActivitySource "Vali-Mediator" (OpenTelemetry-compatible, no otel dependency).
- IRequestObserver lifecycle hooks: OnStarted, OnCompleted, OnFailed.
- ObservabilityContext: rich per-execution context with Tags dictionary.
- IMetricsCollector pluggable interface with NoOpMetricsCollector and ConsoleMetricsCollector.
- ObservabilityBehavior for IRequest pipeline.
- ObservabilityDispatchBehavior for INotification / IFireAndForget pipeline.
- ConsoleLoggingObserver for structured console output.
- Fluent DI extensions: AddObservabilityBehavior, AddObservability, AddMetricsCollector, AddRequestObserver, AddConsoleMetrics, AddConsoleLoggingObserver.