AspNetCore开发笔记:进一步实现非侵入性审计日志功能

💡 原文中文,约9300字,阅读约需23分钟。
📝

内容提要

本文介绍了作者对之前实现的审计日志功能进行重构的过程。作者将之前分散在各个目录中的与审计相关的代码整合到了一个目录中,提高了代码的可维护性。作者还对AuditLog类进行了重构,将实体变化内容从AuditLog中分离出来,使用List<EntityChangeInfo>类型的属性来存储实体变化。作者还对AuditLogAttribute类进行了修改,简化了参数,只需要传入EventType即可。最后,作者介绍了如何获取实体变化,并使用FreeSQL的Aop.CurdBefore事件来实现实体变化的监控。作者还提供了扩展方法来方便使用该功能。最后,作者展示了使用效果,并介绍了AuditLog中间件的作用。

🎯

关键要点

  • 作者重构了审计日志功能,实现了对业务代码的完全无侵入审计。
  • 将与审计相关的代码整合到一个目录中,提高了代码的可维护性。
  • 创建了EntityChangeInfo类,用于保存实体变化信息。
  • 重构了AuditLog类,将实体变化内容分离到EntityChanges属性中。
  • 修改了AuditLogAttribute类,简化了参数,只需传入EventType。
  • 实现了FreeSQL的实体变化监控,通过Aop.CurdBefore事件获取实体变化。
  • 提供了扩展方法以便于注册服务和中间件,符合AspNetCore开发习惯。
  • 展示了使用效果,审计日志成功记录在MongoDB中。
  • AuditLog中间件在每个请求中生成EventId并存储在HttpContext.Items中。

延伸问答

如何实现完全无侵入的审计日志功能?

通过在需要审计的接口上加上 [AuditLog] 特性,可以记录该接口的操作日志和相关的实体变化记录。

重构后的AuditLog类有什么变化?

AuditLog类将实体变化内容分离到EntityChanges属性中,使用List<EntityChangeInfo>类型来存储实体变化。

如何获取实体变化信息?

通过FreeSQL的Aop.CurdBefore事件,可以实现实体变化的监控,并获取实体变化信息。

AuditLogAttribute类的参数简化了哪些内容?

AuditLogAttribute类的参数简化为只需传入EventType,其他信息会自动获取。

如何在AspNetCore中注册审计服务和中间件?

可以通过扩展方法AddAudit和UseAudit来注册审计服务和中间件,符合AspNetCore的开发习惯。

审计日志记录的效果如何?

审计日志成功记录在MongoDB中,包含事件ID、事件类型、用户信息和实体变化等详细信息。

🏷️

标签

➡️

继续阅读