我有一个Web应用程序,我想审核应用程序上的大多数用户操作,例如登录,插入到db,更新到db,触发异常等等。
我的其中一个建议使用队列来提高性能,因此您只需要一个事件,然后自动处理它,而不必等待它被处理。
你有什么建议?我该如何处理它们?排队他们没有问题,但我不确定他们将如何处理,然后没有身体调用方法。
我正在使用C#和.NET 4.0
答案 0 :(得分:7)
我只是推荐一个稳定且受支持的现成日志框架。您是否考虑过日志框架,例如log4net?
如果您愿意,可以编写一个自定义appender来登录MSMQ。
答案 1 :(得分:5)
我一直在研究一个可能有用的图书馆。
Audit.NET及其对审核不同系统的扩展(WCF,MVC,WebApi,EF)并将日志存储在不同的数据存储中({{ 3}},SQL,MongoDB,文件,EventLog)将为您提供配置您想要审核的的灵活性以及 所在的位置您想存储审核日志。
答案 2 :(得分:2)
另一种记录器称为TracerX。它是用C#编写的,快速而灵活。因为源代码可用,这意味着您可以根据需要进行修改。它配有一个允许过滤输出的查看器。
https://github.com/MarkLTX/TracerX以及有关如何使用它的文章:
答案 3 :(得分:2)
实际上有两个感兴趣的主题:
异步日志记录可以将繁重的处理速度提高100倍。使用一个编写器线程将队列转储到日志接收器中,比如100ms,但是必须确定性地启动和停止日志记录引擎,以便它可以在应用程序停止时刷新接收器。
面向方面编程解决了您的跨领域问题 - 审计/日志调用应在所需的操作序言/结语中调用 - 查看PostSharp项目。
答案 4 :(得分:0)
(答案来得太晚了,这篇帖子在google上的排名很高,所以我认为可能值得考虑一些选项)
如果您要实际审核。 (通过这个,我的意思是记录一个操作发生了,是谁执行的,何时执行的,并且该可审核的日志可以用作外部审核员的证据)
(Debug Logging vs Auditing logging)
如果是这样,您可以考虑一些选择,例如:
两者都很酷,因为它们允许您携带自己的数据存储区
这里的设计(可能会影响您的体系结构以包含事件)是事件是不可变的,如果存储它们,那么您可以对系统中发生的事情进行可审核的存储
note 看起来并不能解决上面的问题,但是确实解决了审计问题,因此我已经提到了
您必须确认日志库如果无法添加审核日志,则会引发异常。
如果不这样做,那么您将丢失可审核的日志,那么您将无法与审核员建立信任
旁注1-使用选项1和3,您可能需要确保将日志写入与主数据存储区相同的事务中。确保所有信息均为ACID。 (这类似于人们发布数据库事务之外的事件时遇到的问题)
注释2-审核日志应该能够识别谁做了什么,因此您可能/应该加密最终存储在其中的数据存储。