Stratara.ServiceDefaults
4.4.8
Prefix Reserved
See the version list below for details.
dotnet add package Stratara.ServiceDefaults --version 4.4.8
NuGet\Install-Package Stratara.ServiceDefaults -Version 4.4.8
<PackageReference Include="Stratara.ServiceDefaults" Version="4.4.8" />
<PackageVersion Include="Stratara.ServiceDefaults" Version="4.4.8" />
<PackageReference Include="Stratara.ServiceDefaults" />
paket add Stratara.ServiceDefaults --version 4.4.8
#r "nuget: Stratara.ServiceDefaults, 4.4.8"
#:package Stratara.ServiceDefaults@4.4.8
#addin nuget:?package=Stratara.ServiceDefaults&version=4.4.8
#tool nuget:?package=Stratara.ServiceDefaults&version=4.4.8
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.11.0)
- Microsoft.Extensions.ServiceDiscovery (>= 10.11.0)
- OpenTelemetry.Exporter.OpenTelemetryProtocol (>= 1.20.1)
- OpenTelemetry.Extensions.Hosting (>= 1.20.1)
- OpenTelemetry.Instrumentation.EntityFrameworkCore (>= 1.20.1-beta.1)
- OpenTelemetry.Instrumentation.Http (>= 1.20.1)
- OpenTelemetry.Instrumentation.Runtime (>= 1.20.1)
- 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.8)
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.6.0 | 0 | 10/28/2026 |
| 4.5.0 | 0 | 10/28/2026 |
| 4.4.10 | 142 | 10/26/2026 |
| 4.4.9 | 67 | 10/26/2026 |
| 4.4.8 | 215 | 10/24/2026 |
| 4.4.7 | 82 | 10/23/2026 |
| 4.4.6 | 176 | 10/22/2026 |
| 4.4.5 | 245 | 10/14/2026 |
| 4.4.4 | 260 | 10/10/2026 |
| 4.4.3 | 91 | 10/10/2026 |
| 4.4.2 | 361 | 10/2/2026 |
| 4.4.1 | 343 | 9/29/2026 |
| 4.4.0 | 113 | 9/27/2026 |
| 4.3.1 | 109 | 9/25/2026 |
| 4.3.0 | 276 | 9/23/2026 |
| 4.2.0 | 129 | 9/18/2026 |
| 4.1.1 | 89 | 9/16/2026 |
| 4.1.0 | 83 | 9/16/2026 |
| 4.0.4 | 812 | 9/14/2026 |
| 4.0.3 | 96 | 9/3/2026 |
A fix for hosts on the Orleans execution model. A store reader that catches up a large backlog and a singleton
work that runs long now answer their keep-alive, so neither leaves reminder errors in the silo's log. A silo that
joins while a singleton work runs long on another silo no longer fails its start. No API change, no schema change
and no migration.
### Fixed
- **A busy store reader or singleton work answers its keep-alive.** On the Orleans execution model, a projection or
saga reader that caught up a backlog for longer than the runtime's response timeout made its keep-alive tick wait
behind the catch-up, and Orleans logged `Could not deliver reminder tick` at Error, once per partition and
keep-alive period. A singleton work whose run outlasted the timeout did the same. Nothing was lost, but a large
catch-up left dozens of errors on the silo. The keep-alive and the poll now start a catch-up where none is
running and do not wait for it. A partition is still read by one catch-up at a time, and a commit during a
catch-up is still applied by it. A singleton work's keep-alive interleaves with its run, and runs still never
overlap.
- **A silo starts while a singleton work runs long.** A silo that started while a singleton work it registers ran
longer than the response timeout on another silo waited for that run in its own start. The start then failed
with a `TimeoutException`. The call a starting silo makes to each singleton work and store reader now
interleaves, so the start goes on.
- *Operate the Orleans execution model* says that a durable timer whose handler outlasts the response timeout
still makes Orleans log `Could not deliver reminder tick` for that tick, and that the line says nothing about
the timer. It also says that, outside a deploy, the line now points to an unreachable store reader or singleton
work rather than a busy one.