繁体   English   中英

Web API2如何使用带注释的友好名称记录用户操作

[英]Web API2 How to log user actions with friendly names with an Annotation

我正在使用未开发的Web API,需要以友好的方式记录用户的操作。 我可以看到它很容易收集已登录的用户,控制器,操作和参数(如本文),我正在寻找的是提供易于阅读的友好消息,例如:

  • “ Paul已登录” +时间戳记
  • “保罗创建了一个新产品( 一些产品元数据 )” +时间戳
  • “ Paul已删除产品xyz” +时间戳记

我可以在此处调整答案,然后在控制器和操作上使用查找表来转换为具有某些标记替换的人类可读字符串,但是当添加新操作时,这可以视为维护开销。 这也意味着开发人员可能会忘记拨打电话,而我们会错过审核。

有什么方法可以在操作上使用注释来指定人类可读的日志消息是什么? (可能带有令牌)是否有人以通用方式完成了此操作,而代码却没有完全针对该应用程序定制?

我将研究一种面向方面的编程框架,以一种可维护的方式横切您的应用程序。 如果您很高兴添加日志功能,则需要重新编译,那么在特定于日志机制的每个操作上都有强类型注释将是可读且可维护的。 您可以使用配置设置轻松打开或关闭这些功能。

我曾经在这里推荐PostSharp,它很棒而且免费(针对基本方面)。

一个很好的例子是:

http://doc.postsharp.net/example-trace

我已经使用log4net实现了此版本的修改版本,它在生产环境中确实运行良好。

一般来说,我不是AOP的拥护者,因为其令人惊讶的因素可能令人不安,但是在这种情况下,减少维护开销是值得权衡的。

我认为尝试在UI层完成此操作是错误的地方。 如果我输入foo.com/product/delete/1网址,是否表示我删除了产品? 我会说不。

  • 如果该用户没有权限怎么办?
  • 如果产品不存在会怎样?
  • 如果产品删除失败怎么办?

我认为进行这种审核的正确位置是代码的repo层。 有这样的方法:

public void DeleteProduct(int productID, string username) {
   _db.Products.Delete(productID); //pseudo code
   _auditService.AddAuditRecord($"Product ID {productID} was deleted by {username}");
}

这样,您仅审核成功的数据更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM