MehdiMst00 / AuditLogManager

Audit trail manager powered by asp.net core

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Audit Log Manager

AuditLog - AuditLogChange Entity

AuditLogManager Project

  • Background worker to commit logs to database (SQL Server) using AuditLogQueue
  • AuditLogController to enqueue log with HTTP POST method (You can also add gRPC)
  • Worker setting in appsettings.json:
  "Worker": {
    "DelayInMilliseconds": 2000,
    "CommitCount": 200
  }

AuditLogManager.Sample.AspNetCore Project

  • AuditLogFilterAttribute for create log object and POST to AuditLogManager project (You can combine AuditLogManager and AuditLogManager.Sample.AspNetCore project for removing remote call)
  • SaveChangesAsync override in AppDbContext for getting entity change values:
var auditLog = _auditingManager.Current;
List<AuditLogChangeEntityEntry>? entityChangeList = null;
if (auditLog != null)
{
    entityChangeList = AuditLogChangesHelper.CreateAuditLogChangeEntry(ChangeTracker.Entries().ToList());
}

try
{
    int result = await base.SaveChangesAsync(cancellationToken);

    if (entityChangeList != null)
    {
        AuditLogChangesHelper.UpdateAuditLogChangeEntry(entityChangeList);
        auditLog!.AuditLogChanges.AddRange(entityChangeList.Select(e => e.ToEntity()).ToList());
    }

    return result;
}
finally
{
    ChangeTracker.AutoDetectChangesEnabled = true;
}
  • Add AuditLogFilterAttribute globally or use per each controller class or action method:
// Program.cs
builder.Services.AddControllers(options =>
{
    options.Filters.Add<AuditLogFilterAttribute>();
});

// OR

// TodoesController.cs
[ServiceFilter(typeof(AuditLogFilterAttribute))]
public class TodoesController : ControllerBase
...
  • Use DisableAuditLogFilter for disable auditing
// GET: api/Todoes/5
[HttpGet("{id}")]
[DisableAuditLogFilter]
public async Task<ActionResult<Todo>> GetTodo(int id)

AuditLogManager.AppHost (Aspire)

About

Audit trail manager powered by asp.net core

License:MIT License


Languages

Language:C# 96.6%Language:Dockerfile 3.4%