Novolis.Logging.Contracts
2026.1.6.30
dotnet add package Novolis.Logging.Contracts --version 2026.1.6.30
NuGet\Install-Package Novolis.Logging.Contracts -Version 2026.1.6.30
<PackageReference Include="Novolis.Logging.Contracts" Version="2026.1.6.30" />
<PackageVersion Include="Novolis.Logging.Contracts" Version="2026.1.6.30" />
<PackageReference Include="Novolis.Logging.Contracts" />
paket add Novolis.Logging.Contracts --version 2026.1.6.30
#r "nuget: Novolis.Logging.Contracts, 2026.1.6.30"
#:package Novolis.Logging.Contracts@2026.1.6.30
#addin nuget:?package=Novolis.Logging.Contracts&version=2026.1.6.30
#tool nuget:?package=Novolis.Logging.Contracts&version=2026.1.6.30
Novolis.Logging.Contracts
Remote log line DTOs, JSON wire helpers, and a scope stack bridge for hosts that fan out to multiple logging sinks (named pipe, HTTP ingest, SSE).
One UTF-8 JSON object per line on the wire. Scope dictionaries from ILogger.BeginScope merge once across providers via LoggingScopeStack.
Install
dotnet add package Novolis.Logging.Contracts
Depends on Microsoft.Extensions.Logging.Abstractions.
Quick start — wire format
using Novolis.Logging.Contracts;
var line = new RemoteLogLine
{
T = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
L = (int)LogLevel.Information,
C = "MyApp.Service",
M = "Started",
Scope = new Dictionary<string, string> { ["runId"] = "abc" },
};
var bytes = RemoteLogJson.SerializeLine(line);
var parsed = RemoteLogJson.TryDeserializeLine(System.Text.Encoding.UTF8.GetString(bytes));
JSON property names: t (unix ms), l (level), c (category), m (message), x (exception), sid (session), s (scope map).
Quick start — scope bridge
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Novolis.Logging.Contracts;
services.AddLogging(b => b.AddLoggingScopeStackBridge());
// Any sink can read LoggingScopeStack.CurrentMerged when formatting RemoteLogLine
LoggingScopeBridgeLoggerProvider is silent (never writes logs); it exists so scopes are pushed exactly once per logical scope.
API
| Type | Role |
|---|---|
RemoteLogLine |
One log record on the wire |
RemoteLogJson |
Serialize/deserialize lines; Options, Configure |
LoggingScopeStack |
CurrentMerged scope dictionary (AsyncLocal stack) |
LoggingScopeBridgeLoggerProvider |
Silent provider that pushes scopes |
LoggingScopeStackBridgeExtensions |
AddLoggingScopeStackBridge() on ILoggingBuilder |
Related
| Package | Role |
|---|---|
Novolis.Logging.Core |
Ring buffer + ILogger sink |
Novolis.Logging.Transports |
HTTP ingest/SSE + LocalIpc |
Novolis.Logging.Faster |
Durable FasterLog sink |
Novolis.Logging.Agent |
Agent Surface for agents |
Restore from nuget.org + GitHub Packages (Novolis.* at 2026.1.*).
| 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
- Microsoft.Extensions.DependencyInjection (>= 10.0.12)
- Microsoft.Extensions.Logging (>= 10.0.12)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.12)
NuGet packages (3)
Showing the top 3 NuGet packages that depend on Novolis.Logging.Contracts:
| Package | Downloads |
|---|---|
|
Novolis.Logging.Core
In-process remote log hub, ring buffer, and ILogger provider for Novolis logging. |
|
|
Novolis.Logging.Ndjson
Reusable ILogger provider and rotating NDJSON file sink. |
|
|
Novolis.Logging.Telemetry
Opt-in telemetry events persisted as typed NDJSON records. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2026.1.6.30 | 0 | 10/4/2026 |
| 2026.1.6.29 | 53 | 10/3/2026 |
| 2026.1.6.26 | 52 | 10/1/2026 |
| 2026.1.6.25 | 49 | 9/30/2026 |