mostlylucid.ephemeral.logging
2.3.2
dotnet add package mostlylucid.ephemeral.logging --version 2.3.2
NuGet\Install-Package mostlylucid.ephemeral.logging -Version 2.3.2
<PackageReference Include="mostlylucid.ephemeral.logging" Version="2.3.2" />
<PackageVersion Include="mostlylucid.ephemeral.logging" Version="2.3.2" />
<PackageReference Include="mostlylucid.ephemeral.logging" />
paket add mostlylucid.ephemeral.logging --version 2.3.2
#r "nuget: mostlylucid.ephemeral.logging, 2.3.2"
#:package mostlylucid.ephemeral.logging@2.3.2
#addin nuget:?package=mostlylucid.ephemeral.logging&version=2.3.2
#tool nuget:?package=mostlylucid.ephemeral.logging&version=2.3.2
Mostlylucid.Ephemeral.Logging
Provides adapters between Microsoft.Extensions.Logging and the signal world.
Log↔Signal features
- Log → Signal:
SignalLoggerProviderconvertsILoggerevents into slugged signals such aslog.error.orders.dbfailure, carrying typed payloads withEventId, category, level, exception metadata, and captured scope properties so you can target specific errors byEventId.Id,EventId.Name, or exception type. - Signal → Log:
SignalToLoggerAdaptermirrors signals back intoILoggerwith inferred severity, payload, and message formatting so signals appear in standard telemetry sinks. - Customizable mapping:
SignalLogHookOptions.MapSignal/MapPayloadlet you control the emitted signal name or payload structure if you prefer different prefixes or labels.
var sink = new SignalSink();
var typedSink = new TypedSignalSink<SignalLogPayload>(sink);
using var loggerFactory = LoggerFactory.Create(builder =>
{
builder.AddConsole();
builder.AddProvider(new SignalLoggerProvider(typedSink, new SignalLogHookOptions
{
MinimumLevel = LogLevel.Warning,
MapSignal = ctx => $"alert.{ctx.EventId.Name ?? ctx.EventId.Id}"
}));
});
The typed payload gives you the EventId, exception type/message, and any captured scope values, so attribute jobs or
signal watchers can use those labels to drive downstream logic.
Usage
- Log → Signals: attach
SignalLoggerProviderto yourILoggerFactory(with a sharedSignalSinkorTypedSignalSink<SignalLogPayload>). The provider emits sluggedlog.{level}.{category}.{event}signals populated with typed payloads so attribute jobs, caches, or other listeners can react to logging events like any other signal. - Signals → Log: plug
SignalToLoggerAdapterinto your signal sink to mirror signals back intoILoggerwith inferred log level, messages, and event ids.
Both directions keep the SignalSink/SignalEvent plumbing centralized while packaging the logging surface separately.
Sample: log watcher pipeline
var sink = new SignalSink();
var typedSink = new TypedSignalSink<SignalLogPayload>(sink);
using var loggerFactory = LoggerFactory.Create(builder =>
{
builder.AddConsole();
builder.AddProvider(new SignalLoggerProvider(typedSink));
});
using var watcher = new EphemeralSignalJobRunner(sink, new[] { new LogWatcherJobs(sink) });
var logger = loggerFactory.CreateLogger("orders");
logger.LogError(new EventId(1001, "DbFailure"), "Order store failed");
The LogWatcherJobs class (see mostlylucid.ephemeral.attributes) can then listen for log.error.* signals, raise
downstream escalation signals, and keep observability and remediation co-located with your signal-driven workflows. Use
SignalToLoggerAdapter when you want the resulting signal activity to re-appear in the standard logging pipeline as
well.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | 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 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
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.1)
- mostlylucid.ephemeral (>= 2.3.2)
-
net8.0
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.1)
- mostlylucid.ephemeral (>= 2.3.2)
-
net9.0
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.1)
- mostlylucid.ephemeral (>= 2.3.2)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on mostlylucid.ephemeral.logging:
| Package | Downloads |
|---|---|
|
mostlylucid.ephemeral.complete
Meta-package that references all Mostlylucid.Ephemeral packages - bounded async execution with signals, atoms, and patterns. Install this single package to get everything. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2.3.2 | 89 | 1/9/2026 |
| 2.3.1 | 94 | 1/9/2026 |
| 2.3.1-alpha0 | 87 | 1/9/2026 |
| 2.3.0 | 270 | 1/8/2026 |
| 2.3.0-alpha1 | 86 | 1/8/2026 |
| 2.1.0 | 99 | 1/8/2026 |
| 2.1.0-preview | 86 | 1/8/2026 |
| 2.0.1 | 89 | 1/8/2026 |
| 2.0.0 | 129 | 1/8/2026 |
| 2.0.0-alpha1 | 87 | 1/8/2026 |
| 1.7.1 | 419 | 12/11/2025 |
| 1.6.8 | 432 | 12/9/2025 |
| 1.6.7 | 423 | 12/9/2025 |
| 1.6.6 | 425 | 12/9/2025 |
| 1.6.5 | 430 | 12/9/2025 |
| 1.6.0 | 411 | 12/8/2025 |
| 1.5.0 | 412 | 12/8/2025 |
| 1.3.0 | 295 | 12/7/2025 |
| 1.2.2 | 291 | 12/7/2025 |