Logaffe.Client 0.2.2

There is a newer version of this package available.
See the version list below for details.
dotnet add package Logaffe.Client --version 0.2.2
                    
NuGet\Install-Package Logaffe.Client -Version 0.2.2
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Logaffe.Client" Version="0.2.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Logaffe.Client" Version="0.2.2" />
                    
Directory.Packages.props
<PackageReference Include="Logaffe.Client" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Logaffe.Client --version 0.2.2
                    
#r "nuget: Logaffe.Client, 0.2.2"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Logaffe.Client@0.2.2
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Logaffe.Client&version=0.2.2
                    
Install as a Cake Addin
#tool nuget:?package=Logaffe.Client&version=0.2.2
                    
Install as a Cake Tool

Logaffe.Client

Delivery of log entries to a logaffe installation — a self-hostable, central logging tool for a single operator and their AI agent.

This is the layer underneath the two logging-framework packages, and it is the one to reach for when the application logs through neither of them:

Use

using Logaffe.Client;

await using var delivery = new EntryDelivery(new EntryDeliveryOptions
{
    Installation = new Uri("https://logs.example.com"),
    IngestToken  = "logaffe_ingest_…",
});

delivery.Send("""
    {"@t":"2026-08-13T14:12:03.417Z","@mt":"Order {OrderId} shipped","OrderId":4711}
    """);

Send takes one CLEF line and returns immediately. It never throws and never blocks.

A delivery never names a project: the token is the project. The address is scheme and host as the operator reaches the installation — the ingest path is appended and is not a setting.

What it promises

Fire-and-forget, and it means it. Entries go into a bounded in-memory queue and a background loop delivers them. The queue drops the oldest entries when it is full rather than growing, because an unbounded queue turns a logging outage into an outage of the application, which is the one thing this exists to prevent.

Nothing is guaranteed to arrive. There is no durable client-side buffer and no retry that outlives the process. This is affordable because logaffe is additive: the application keeps its own file logging, so a delivery that is lost costs a convenience and never the record.

Failures are reported to you, not swallowed. OnFailure is a delegate rather than an ILogger, so this package asks nothing of the application's logging stack. An installation that could not be reached cannot be told that it could not be reached, so the report belongs in the local log that already exists.

Disposal flushes, with a deadline. Dispose/DisposeAsync spends up to FlushTimeout delivering what is still queued. What does not go in that time is lost — which is what fire-and-forget means.

Settings

default
Installation required scheme and host of the installation
IngestToken required the project's ingest token; write-only, grants no reads
QueueCapacity 10_000 ten full batches; oldest dropped when full
BatchInterval 1s how long the first entry waits for company
FlushTimeout 5s how long disposal keeps trying
DeliveryTimeout 10s how long one request may take
OnFailure null (message, exception) — where problems are reported

The batch limits — a thousand entries, five mebibytes — are product values rather than sender settings, and are applied for you.

An overload takes your own HttpClient when the application manages its own.

The format

One JSON object per line. @t (an instant with an offset or Z) and @mt (a message template) are required; @l defaults to Information; @x carries an exception as text. Everything not beginning with @ is a property.

The server renders the template, so @m is refused rather than ignored — there is one place where rendering happens. Placeholders are substituted only where a property of the same name was delivered; everything else stays character for character, because log content is untrusted and an application logging a raw request body will eventually log braces.

instance, SourceContext, TraceId and SpanId are ordinary properties that the installation promotes to indexed fields when present. Supplying none of them is fully supported.

Full detail: docs/ingestion.md.

Requirements

.NET 8 or later. MIT licensed.

Product 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 was computed.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net8.0

    • No dependencies.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on Logaffe.Client:

Package Downloads
Logaffe.Serilog

A Serilog sink delivering to a logaffe installation. Because the wire format is CLEF, the sink is configuration rather than a mapping layer.

Logaffe.Extensions.Logging

An ILoggerProvider delivering to a logaffe installation, for applications that are not on Serilog. It builds the same CLEF from ILogger's message template and state.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.9.0 120 9/6/2026
0.8.0 121 9/6/2026
0.7.1 126 9/6/2026
0.7.0 120 9/6/2026
0.6.0 1,199 8/23/2026
0.5.0 290 8/23/2026
0.4.0 138 8/20/2026
0.3.0 134 8/19/2026
0.2.8 131 8/19/2026
0.2.7 127 8/19/2026
0.2.6 138 8/19/2026
0.2.5 141 8/19/2026
0.2.4 148 8/19/2026
0.2.3 418 8/19/2026
0.2.2 127 8/18/2026
0.2.1 129 8/17/2026
0.2.0 133 8/17/2026
0.1.1 152 8/13/2026
0.1.0 131 8/13/2026
0.1.0-alpha.1 71 8/13/2026