AlirezaFlh.AudiLogging
1.0.1
dotnet add package AlirezaFlh.AudiLogging --version 1.0.1
NuGet\Install-Package AlirezaFlh.AudiLogging -Version 1.0.1
<PackageReference Include="AlirezaFlh.AudiLogging" Version="1.0.1" />
paket add AlirezaFlh.AudiLogging --version 1.0.1
#r "nuget: AlirezaFlh.AudiLogging, 1.0.1"
// Install AlirezaFlh.AudiLogging as a Cake Addin #addin nuget:?package=AlirezaFlh.AudiLogging&version=1.0.1 // Install AlirezaFlh.AudiLogging as a Cake Tool #tool nuget:?package=AlirezaFlh.AudiLogging&version=1.0.1
AuditLog Package
The AuditLog Package is a flexible and extensible solution for implementing audit logging in your .NET applications. It tracks changes to your entities and records them in an audit log, with support for customization and integration into any project.
Features
- Entity-Agnostic Logging: Works with any
IAuditLogEntity
implementation. - Flexible Configuration: Customize the
AuditLog
entity, table names, and fields. - Seamless Integration: Easily integrate with
DbContext
andChangeTracker
. - Extensible: Optional hooks to modify behavior and configurations.
- Multi-Project Support: Shareable across projects via NuGet or direct reference.
Installation
Add the package to your project:
dotnet add package AuditLog
Getting Started
1. Register the Services
In your Startup.cs
or Program.cs
, add the AuditLog
services:
services.AddAuditLog(options =>
{
// Optional: Customize the AuditLog entity configuration
options.ConfigureAuditLogEntity = modelBuilder =>
{
modelBuilder.Entity<AuditLog>().ToTable("CustomAuditLogTable");
modelBuilder.Entity<AuditLog>().Property(a => a.TableName).HasMaxLength(200);
};
});
2. Configure the DbContext
Update your main DbContext
to include audit logging functionality:
public class MyAppDbContext : DbContext
{
private readonly IAuditLogger _auditLogger;
public MyAppDbContext(DbContextOptions<MyAppDbContext> options, IAuditLogger auditLogger)
: base(options)
{
_auditLogger = auditLogger;
}
public DbSet<MyEntity> MyEntities { get; set; }
public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken = default)
{
// Log changes to the database
await _auditLogger.LogChangesAsync(ChangeTracker);
// Save the actual changes
return await base.SaveChangesAsync(cancellationToken);
}
}
3. Default AuditLog Entity
The package includes a default AuditLog
entity. If you need customization, implement your own version of IAuditLogEntity
.
Default Entity:
public class AuditLog : IAuditLogEntity
{
public int Id { get; set; }
public string TableName { get; set; }
public int RecordId { get; set; }
public string Action { get; set; }
public int? ChangedById { get; set; }
public DateTime ChangedOn { get; set; } = DateTime.UtcNow;
public string? OldValues { get; set; }
public string? NewValues { get; set; }
public string? IpAddress { get; set; }
}
4. Customizing the Entity
To use a custom entity, implement IAuditLogEntity
:
public class CustomAuditLog : IAuditLogEntity
{
public int Id { get; set; }
public string TableName { get; set; }
public int RecordId { get; set; }
public string Action { get; set; }
public int? ChangedById { get; set; }
public DateTime ChangedOn { get; set; } = DateTime.UtcNow;
public string? OldValues { get; set; }
public string? NewValues { get; set; }
public string? IpAddress { get; set; }
// Custom fields
public string CustomProperty { get; set; }
public bool IsCriticalChange { get; set; }
}
Advanced Configuration
Custom Audit Log Table Name
Override the default table name with the ConfigureAuditLogEntity
option:
options.ConfigureAuditLogEntity = modelBuilder =>
{
modelBuilder.Entity<AuditLog>().ToTable("AuditLogs_Custom");
};
Custom Audit Logger Implementation
If you need advanced logging behavior, create a custom IAuditLogger
implementation:
public class CustomAuditLogger : IAuditLogger
{
public Task LogChangesAsync(ChangeTracker changeTracker)
{
// Custom logging logic here
}
}
Register your custom logger in the DI container:
services.AddScoped<IAuditLogger, CustomAuditLogger>();
Usage Scenarios
- Track changes to critical entities (e.g., user profiles, financial records).
- Maintain a history of database modifications for compliance.
- Integrate with multi-project solutions to centralize audit logging.
Example Use Case
var auditLog = new AuditLog
{
TableName = "Users",
RecordId = 123,
Action = "Update",
ChangedById = 1,
ChangedOn = DateTime.UtcNow,
OldValues = "{"Name": "John"}",
NewValues = "{"Name": "John Doe"}",
IpAddress = "127.0.0.1"
};
await _auditLogger.LogAsync(new List<IAuditLogEntity> { auditLog });
Contributing
Feel free to open issues or contribute to the package by submitting pull requests.
License
This package is licensed under the MIT License.
Author
Built with ❤️ by [Alireza Fallah]
For questions or feedback, contact us at [alirezaflh70@gmail.com]
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. |
-
net8.0
- Newtonsoft.Json (>= 13.0.3)
- Sgb.Kernel.Data (>= 0.0.1)
- Sgb.Kernel.Token (>= 0.0.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.