Stratara.ServiceDefaults
4.4.4
Prefix Reserved
dotnet add package Stratara.ServiceDefaults --version 4.4.4
NuGet\Install-Package Stratara.ServiceDefaults -Version 4.4.4
<PackageReference Include="Stratara.ServiceDefaults" Version="4.4.4" />
<PackageVersion Include="Stratara.ServiceDefaults" Version="4.4.4" />
<PackageReference Include="Stratara.ServiceDefaults" />
paket add Stratara.ServiceDefaults --version 4.4.4
#r "nuget: Stratara.ServiceDefaults, 4.4.4"
#:package Stratara.ServiceDefaults@4.4.4
#addin nuget:?package=Stratara.ServiceDefaults&version=4.4.4
#tool nuget:?package=Stratara.ServiceDefaults&version=4.4.4
Stratara.ServiceDefaults
Derived. The behaviour described here is specified under
openspec/specs/. Those specifications are the source; this page explains and illustrates them.
License: MIT.
Cross-host observability defaults for the Stratara stack. Reference from every host (API, worker) to get OpenTelemetry + Serilog wired up with sensible defaults.
What's in the box
| Extension | Purpose |
|---|---|
ConfigureOpenTelemetry |
Logging + metrics + tracing with HTTP, EF Core, RabbitMQ, runtime instrumentation; OTLP exporter wired up automatically when OTEL_EXPORTER_OTLP_ENDPOINT is set. Accepts optional MeterProviderBuilder / TracerProviderBuilder callbacks for host-specific extras. |
ConfigureSerilog |
Structured logging with destructuring attributes, async console sink, OTLP sink (gRPC or HTTP/Protobuf based on OTEL_EXPORTER_OTLP_PROTOCOL), dev-mode log cleanup at {Path.GetTempPath()}/stratara-logs/{service-name}.log — the OS temp directory, so not literally /tmp on Windows or macOS. |
ConfigureSerilogBootstrapLogger |
Sets up Log.Logger as a bootstrap logger before the host is built, so early-startup errors surface to the console. |
Quick start
builder.ConfigureOpenTelemetry();
builder.ConfigureSerilog();
It deletes your development log file on start-up
In the Development environment only, configuring Serilog deletes the current log file before
opening it: %TEMP%/stratara-logs/{OTEL_SERVICE_NAME}.log, where the service name falls back to
Unknown when OTEL_SERVICE_NAME is unset. The intent is a clean file per debugging session rather
than one that grows across dozens of restarts.
Two consequences worth knowing before they cost you an hour:
- A crash you wanted to read is gone the moment you restart to reproduce it. Copy the file before restarting, or point the sink elsewhere for that session.
- Two development services with no
OTEL_SERVICE_NAMEshareUnknown.logand delete each other's. Set the variable per service.
Outside Development nothing is deleted.
Sibling packages
Stratara.EventSourcing.WorkerDefaults— one-stopAddBackendServices/AddXxxWorkerServicescomposites that wire the framework's mediator + outbox + projections + sagas stack.Stratara.ServiceDefaults.AspNetCore— ASP.NET-specific extras:AddDefaultHealthChecks+MapDefaultEndpoints(/health,/alive) and ASP.NET request OTel instrumentation.
Dependencies
Stratara.Shared— diagnostics base (ApplicationDiagnostics.Activity.SourceName).- OpenTelemetry runtime + exporter packages.
- Serilog sinks (Console, File, Async, OpenTelemetry).
Destructurama.Attributedfor destructuring conventions.Microsoft.Extensions.Http.Resilience+Microsoft.Extensions.ServiceDiscovery.
Prerelease dependencies. This package transitively pulls in two prerelease OpenTelemetry instrumentation packages that have no stable release yet:
OpenTelemetry.Instrumentation.EntityFrameworkCore(beta) andRabbitMQ.Client.OpenTelemetry(RC). Both ride the stable OpenTelemetry 1.15.x core. NU5104 is suppressed in this csproj with that justification — consumers inherit the prerelease deps transitively. We will swap to GA as soon as the vendors ship stable.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. 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. |
-
net10.0
- Destructurama.Attributed (>= 5.3.0)
- Microsoft.Extensions.Http.Resilience (>= 10.9.0)
- Microsoft.Extensions.ServiceDiscovery (>= 10.9.0)
- OpenTelemetry.Exporter.OpenTelemetryProtocol (>= 1.18.0)
- OpenTelemetry.Extensions.Hosting (>= 1.18.0)
- OpenTelemetry.Instrumentation.EntityFrameworkCore (>= 1.18.0-beta.1)
- OpenTelemetry.Instrumentation.Http (>= 1.18.0)
- OpenTelemetry.Instrumentation.Runtime (>= 1.18.0)
- RabbitMQ.Client.OpenTelemetry (>= 1.0.0-rc.2)
- Serilog.Extensions.Hosting (>= 10.0.0)
- Serilog.Formatting.Compact (>= 3.0.0)
- Serilog.Settings.Configuration (>= 10.0.1)
- Serilog.Sinks.Async (>= 2.1.0)
- Serilog.Sinks.Console (>= 6.1.1)
- Serilog.Sinks.File (>= 7.0.0)
- Serilog.Sinks.OpenTelemetry (>= 4.2.0)
- Stratara.Shared (>= 4.4.4)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Stratara.ServiceDefaults:
| Package | Downloads |
|---|---|
|
Stratara.ServiceDefaults.AspNetCore
ASP.NET Core extensions on top of Stratara.ServiceDefaults — default health checks, /health and /alive endpoints, and ASP.NET request OpenTelemetry instrumentation. Reference from every API host. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 4.4.4 | 141 | 10/10/2026 |
| 4.4.3 | 73 | 10/10/2026 |
| 4.4.2 | 280 | 10/2/2026 |
| 4.4.1 | 333 | 9/29/2026 |
| 4.4.0 | 107 | 9/27/2026 |
| 4.3.1 | 104 | 9/25/2026 |
| 4.3.0 | 271 | 9/23/2026 |
| 4.2.0 | 120 | 9/18/2026 |
| 4.1.1 | 85 | 9/16/2026 |
| 4.1.0 | 79 | 9/16/2026 |
| 4.0.4 | 807 | 9/14/2026 |
| 4.0.3 | 86 | 9/3/2026 |
| 4.0.2 | 577 | 9/3/2026 |
| 4.0.1 | 307 | 9/2/2026 |
| 4.0.0 | 162 | 8/31/2026 |
| 4.0.0-preview.1 | 76 | 8/31/2026 |
| 3.4.0 | 119 | 8/28/2026 |
| 3.3.0 | 90 | 8/25/2026 |
| 3.2.3 | 104 | 8/22/2026 |
| 3.2.2 | 108 | 8/14/2026 |
A one-fix release. On the Redis-backed replay state, a host could report a replay still active after it had ended
it, holding publication back for up to one refresh interval. Nothing else changes; no configuration or migration is
needed.
### Fixed
- **A host no longer reports a replay active after it ended the replay itself.** On the Redis-backed replay state, a
refresh that had read the marking just before the host's own deactivation could compare its generation before the
deactivation and write the field after it, leaving `IsReplayActive` true — and publication held back — until the
next refresh (`ProjectionReplay:RefreshSeconds`, default 5). The comparison and the write are now one step with the
transition. Present since 4.4.2.