Lyo.Audit
3.0.0
dotnet add package Lyo.Audit --version 3.0.0
NuGet\Install-Package Lyo.Audit -Version 3.0.0
<PackageReference Include="Lyo.Audit" Version="3.0.0" />
<PackageVersion Include="Lyo.Audit" Version="3.0.0" />
<PackageReference Include="Lyo.Audit" />
paket add Lyo.Audit --version 3.0.0
#r "nuget: Lyo.Audit, 3.0.0"
#:package Lyo.Audit@3.0.0
#addin nuget:?package=Lyo.Audit&version=3.0.0
#tool nuget:?package=Lyo.Audit&version=3.0.0
Lyo.Audit
Audit trail with two records: AuditChange (entity change tracking) and AuditEvent (events to log). Both are immutable and stay unchanged after creation. Each carries an
EntityRef for the subject plus an optional EntityRef for the actor. Storage is contracted through IAuditRecorder.
Features
- AuditChange. A change to an entity or property:
Id(Guid),Timestamp,Entity(EntityRef),OldValues(property to old value),ChangedProperties(property to new value), optionalActor(EntityRef?). - AuditEvent. Something to log:
Id(Guid),Subject(EntityRef),EventType,Timestamp, optionalMessage,Actor(EntityRef?), andMetadata. - IAuditRecorder. Sync and async:
RecordChange/RecordChangeAsync,RecordChanges/RecordChangesAsync,RecordEvent/RecordEventAsync,RecordEvents/RecordEventsAsync. Persist to a database or log sink in your implementation. - NullAuditRecorder. A no-op when you do not need auditing.
Examples
AuditChange (tracking entity edits)
using Lyo.Audit;
using Lyo.EntityReference.Models;
var change = new AuditChange(
EntityRef.For<Order>(order.Id),
new Dictionary<string, object?> {
["Name"] = "Old Name",
["Status"] = "Draft"
},
new Dictionary<string, object?> {
["Name"] = "New Name",
["Status"] = "Submitted"
}) {
Actor = EntityRef.ForKey("User", currentUserId.ToString())
};
auditRecorder.RecordChange(change);
AuditEvent (events worth logging)
using Lyo.Audit;
using Lyo.EntityReference.Models;
var evt = new AuditEvent(
Subject: EntityRef.ForKey("User", "user-123"),
EventType: "UserLogin",
Message: "User signed in successfully",
Actor: EntityRef.ForKey("User", "user-123"),
Metadata: new Dictionary<string, object?> {
["IpAddress"] = "192.168.1.1",
["UserAgent"] = "Mozilla/5.0..."
});
auditRecorder.RecordEvent(evt);
Recording in bulk and asynchronously
auditRecorder.RecordChanges(new[] { change1, change2, change3 });
auditRecorder.RecordEvents(new[] { evt1, evt2 });
await auditRecorder.RecordChangeAsync(change);
await auditRecorder.RecordChangesAsync(changes, cancellationToken);
await auditRecorder.RecordEventAsync(evt);
await auditRecorder.RecordEventsAsync(events, cancellationToken);
AuditChange (tracking entity edits)
Decorate domain types with [EntityRefLogicalType("MyApp.Order")] so the persisted EntityType stays stable if the CLR type is renamed.
Storing in PostgreSQL
PostgreSQL storage with EF Core migrations is in Lyo.Audit.Postgres:
<PackageReference Include="Lyo.Audit.Postgres" Version="1.0.22" />
services.AddPostgresAuditRecorder(new PostgresAuditOptions {
ConnectionString = configuration.GetConnectionString("Audit"),
EnableAutoMigrations = true
});
Migrations run at host startup through IHostedService when EnableAutoMigrations is true, not during service registration. The app needs a host such as
Host.CreateDefaultBuilder() or WebApplication.CreateBuilder().
Dependencies
Generated from ProjectReference / PackageReference (same model as docs/Lyo.ProjectGraph.html).
Lyo.EntityReference.Models(direct, lyo)Lyo.Common.Core(transitive, lyo)Lyo.Exceptions(transitive, lyo)Microsoft.Bcl.AsyncInterfaces10.0.5(transitive, microsoft, netstandard2.0)System.Memory4.6.3(transitive, microsoft, netstandard2.0)System.Text.Json10.0.5(transitive, microsoft, netstandard2.0)
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. 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 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. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Lyo.EntityReference.Models (>= 3.0.0)
-
net10.0
- Lyo.EntityReference.Models (>= 3.0.0)
NuGet packages (4)
Showing the top 4 NuGet packages that depend on Lyo.Audit:
| Package | Downloads |
|---|---|
|
Lyo.Reporting.Postgres
PostgreSQL reporting data layer with EF Core, optional auto-migrations, and report generation orchestration. |
|
|
Lyo.Job.Postgres
PostgreSQL persistence for Lyo job management with EF Core, optional auto-migrations, and RabbitMQ event publishing. |
|
|
Lyo.Audit.Postgres
PostgreSQL implementation of Lyo.Audit using Entity Framework Core. Persists AuditChange and AuditEvent to Postgres with migrations support. |
|
|
Lyo.Authorization
Resource grants. A check asks whether a subject may perform an action on a resource. It does not sign anyone in and it does not parse tokens. |
GitHub repositories
This package is not used by any popular GitHub repositories.