Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Web API2如何使用带有注释的友好名称记录用户操作_C#_Logging_Asp.net Web Api - Fatal编程技术网

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

C# Web API2如何使用带有注释的友好名称记录用户操作,c#,logging,asp.net-web-api,C#,Logging,Asp.net Web Api,我正在开发一个greenfield Web API,需要以友好的方式记录用户的操作。我可以很容易地收集登录用户、控制器、操作和参数,如 我想要的是给人们提供可读的友好信息,如: “Paul登录”+时间戳 “Paul创建了一个新产品(一些产品元数据)”+时间戳 “Paul已删除产品xyz”+时间戳 我可以调整答案,然后使用控制器和操作上的查找表,通过一些令牌替换将其转换为我的可读字符串,但我可以看到,添加新操作时,这是一项维护开销。这也意味着开发人员可能会忘记进行调用,而我们会错过审核 是否有

我正在开发一个greenfield Web API,需要以友好的方式记录用户的操作。我可以很容易地收集登录用户、控制器、操作和参数,如 我想要的是给人们提供可读的友好信息,如:

  • “Paul登录”+时间戳
  • “Paul创建了一个新产品(一些产品元数据)”+时间戳
  • “Paul已删除产品xyz”+时间戳
我可以调整答案,然后使用控制器和操作上的查找表,通过一些令牌替换将其转换为我的可读字符串,但我可以看到,添加新操作时,这是一项维护开销。这也意味着开发人员可能会忘记进行调用,而我们会错过审核

是否有一种方法可以在操作上使用注释来指定我的可读日志消息是什么?(可能带有代币) 有没有人以一种通用的方式这样做,而不让代码完全定制到该应用程序

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

我在这里使用并推荐PostSharp,它很棒而且免费(对于基本方面)

一个很好的例子是:

我已经用log4net实现了一个修改版本,它在生产环境中运行得非常好

一般来说,我不喜欢AOP,因为它的意外因素可能会令人不安,但在这种情况下,维护开销的减少是值得权衡的。

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

我在这里使用并推荐PostSharp,它很棒而且免费(对于基本方面)

一个很好的例子是:

我已经用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}");
}

这样,只有在数据更改成功的情况下,才可以对其进行审核。

我认为在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}");
}

这样,只有在成功的时候才对数据进行审计。

请考虑一些好的观点。在我看来,登录API层的好处是,如果用户试图做一些他们没有授权的事情,我们需要审核。在我看来,登录API层的好处在于,如果用户试图做未经授权的事情,我们需要进行审计。