RG.AuditTrail
1.1.0
dotnet add package RG.AuditTrail --version 1.1.0
NuGet\Install-Package RG.AuditTrail -Version 1.1.0
<PackageReference Include="RG.AuditTrail" Version="1.1.0" />
<PackageVersion Include="RG.AuditTrail" Version="1.1.0" />
<PackageReference Include="RG.AuditTrail" />
paket add RG.AuditTrail --version 1.1.0
#r "nuget: RG.AuditTrail, 1.1.0"
#:package RG.AuditTrail@1.1.0
#addin nuget:?package=RG.AuditTrail&version=1.1.0
#tool nuget:?package=RG.AuditTrail&version=1.1.0
RG.AuditTrail
โจ Features
- Insert / Update / Delete actions
- Old Values and New Values
- Logged-in Username from JWT token
- Timestamp and Table Name
- Correlation ID tracking
- User, IP & request tracking
- Plug & Play integration
- Works with custom DbContext
๐ฆ Installation
dotnet add package RG.AuditTrail
RG.AuditTrail with JWT Authentication }
๐น Step 1: Register Services
๐ File: Program.cs
csharp
NameSpaces in PROGRAM.CS
๐ File: Program.cs
using AuditTrail.core.Extensions;
using AuditTrail.core.Helpers;
using AuditTrail.core.Interceptor;
using AuditTrail.core.Interfaces;
using AuditTrail.core.Services;
using AuditTrailWithJWT.Data;
Database Connection in PROGRAM.CS
๐ File: Program.cs
builder.Services.AddDbContext<AppDbContext>((provider, options) =>
{
options.UseSqlServer(
builder.Configuration.GetConnectionString("Connection"))
.UseAuditTrail(provider);
});
Required Services in PROGRAM.CS
๐ File: Program.cs
builder.Services.AddHttpContextAccessor();
builder.Services.AddScoped<HttpContextHelper>();
builder.Services.AddScoped<IAuditService, AuditService>();
builder.Services.AddScoped<AuditSaveChangesInterceptor>();
builder.Services.AddScoped<IAuditDbContext>(sp =>sp.GetRequiredService<AppDbContext>());
Add Middleware (IMPORTANT ORDER) in PROGRAM.CS
๐ File: Program.cs
app.UseAuthentication();
app.UseAuthorization();
app.UseCorrelationId(); // ๐ฅ MUST be first
app.UseAuditTrail(); // ๐ฅ Then audit logging
๐น Step 2: Create AuditLog Table Model create a model otherwise use service on PROGRAM.CS file (Optional if not exists)
builder.Services.AddScoped<IAuditDbContext>(sp โsp.GetRequiredService<AppDbContext>());
๐ File: Models/AuditLog.cs
public class AuditLog
{
public long Id { get; set; }
public string? UserId { get; set; }
public string? Action { get; set; }
public string? TableName { get; set; }
public string? RecordId { get; set; }
public string? OldValues { get; set; }
public string? NewValues { get; set; }
public DateTime CreatedAt { get; set; }
public string? IpAddress { get; set; }
public string? CorrelationId { get; set; }
}
๐น Step 3: Implement DbContext
๐ File: Data/AppDbContext.cs
using AuditTrail.core.Interfaces;
using AuditTrail.core.Models;
public class AppDbContext : DbContext, IAuditDbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options)
: base(options)
{
}
public DbSet<AuditLog> AuditLogs { get; set; }
}
๐น Step 4: JWT Claims Required
var claims = new[]
{
new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
new Claim(ClaimTypes.Name, user.Name),
new Claim(ClaimTypes.Role, user.Role)
};
RG.AuditTrail (with out JWT Authentication) }
๐น Step 1: Program.cs
Requied NAMESPACES in PROGRAM.CS
๐ File: Program.cs
using ActivitylogTest.Data;
using AuditTrail.core.Extensions;
using AuditTrail.core.Interfaces;
Required Database Connection in PROGRAM.CS
๐ File: Program.cs
builder.Services.AddDbContext<AppDbContext>((provider, options) =>
{
options.UseSqlServer(builder.Configuration.GetConnectionString("SimpleConn"))
.UseAuditTrail(provider);
});
Required Services in PROGRAM.CS
๐ File: Program.cs
builder.Services.AddScoped<IAuditDbContext>(provider => provider.GetRequiredService<AppDbContext>());
builder.Services.AddAuditTrail();
Required middleware in PROGRAM.CS
๐ File: Program.cs
app.UseCorrelationId();
app.UseAuditTrail();
๐น Step 2: Add this line in dbContext File
๐ File: Data/AppDbContext.cs
using AuditTrail.core.Interfaces;
using AuditTrail.core.Models;
public class AppDbContext : DbContext, IAuditDbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options)
: base(options)
{
}
public DbSet<AuditLog> AuditLogs { get; set; }
}
๐งช Example Flow
User sends request
CorrelationId middleware generates unique ID
Audit middleware captures:
- User
- IP Address
- API endpoint
- Status code
Data saved into
AuditLogstable
๐ Sample Output (Database)
| Id | UserId | Action | TableName | IpAddress | CorrelationId |
|---|---|---|---|---|---|
| 1 | admin | GET-200 | /api/user | 127.0.0.1 | abc-123 |
โ ๏ธ Important Notes
- Middleware order must be correct
- DbContext must implement
IAuditDbContext - CorrelationId helps track request across services
๐ Requirements
- .NET 8+
- Entity Framework Core
๐จโ๐ป Author
Raj Gupta
โญ Support
If you like this package, give it a โญ on GitHub!
| 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 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. |
-
net8.0
- Microsoft.AspNetCore.Http (>= 2.3.9)
- Microsoft.EntityFrameworkCore (>= 8.0.26)
- Microsoft.EntityFrameworkCore.SqlServer (>= 8.0.26)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.7)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.