使用C#和.NET进行审计

时间:2011-08-02 12:18:45

标签: c# .net logging audit

我有一个Web应用程序,我想审核应用程序上的大多数用户操作,例如登录,插入到db,更新到db,触发异常等等。

我的其中一个建议使用队列来提高性能,因此您只需要一个事件,然后自动处理它,而不必等待它被处理。

你有什么建议?我该如何处理它们?排队他们没有问题,但我不确定他们将如何处理,然后没有身体调用方法。

我正在使用C#和.NET 4.0

5 个答案:

答案 0 :(得分:7)

我只是推荐一个稳定且受支持的现成日志框架。您是否考虑过日志框架,例如log4net?

如果您愿意,可以编写一个自定义appender来登录MSMQ。

答案 1 :(得分:5)

我一直在研究一个可能有用的图书馆。

Audit.NET及其对审核不同系统的扩展(WCFMVCWebApiEF)并将日志存储在不同的数据存储中({{ 3}},SQLMongoDB,文件,EventLog)将为您提供配置您想要审核的的灵活性以及 所在的位置您想存储审核日志。

答案 2 :(得分:2)

另一种记录器称为TracerX。它是用C#编写的,快速而灵活。因为源代码可用,这意味着您可以根据需要进行修改。它配有一个允许过滤输出的查看器。

https://github.com/MarkLTX/TracerX以及有关如何使用它的文章:

http://www.codeproject.com/KB/dotnet/TracerX.aspx

答案 3 :(得分:2)

实际上有两个感兴趣的主题:

  • 异步记录
  • 面向方面的功能

异步日志记录可以将繁重的处理速度提高100倍。使用一个编写器线程将队列转储到日志接收器中,比如100ms,但是必须确定性地启动和停止日志记录引擎,以便它可以在应用程序停止时刷新接收器。

面向方面编程解决了您的跨领域问题 - 审计/日志调用应在所需的操作序言/结语中调用 - 查看PostSharp项目。

答案 4 :(得分:0)

(答案来得太晚了,这篇帖子在google上的排名很高,所以我认为可能值得考虑一些选项)

如果您要实际审核。 (通过这个,我的意思是记录一个操作发生了,是谁执行的,何时执行的,并且该可审核的日志可以用作外部审核员的证据)

Debug Logging vs Auditing logging

如果是这样,您可以考虑一些选择,例如:

  1. 使用审核日志记录库
  2. 采用EventStore数据库
  3. 使用失败很大的日志记录库

1。使用审核库

  • Audit.NET已经在这里提到,并且下载数量惊人,而且功能非常丰富
  • auditable-替代上述内容(免责声明,由我撰写)

两者都很酷,因为它们允许您携带自己的数据存储区

2。事件外包

这里的设计(可能会影响您的体系结构以包含事件)是事件是不可变的,如果存储它们,那么您可以对系统中发生的事情进行可审核的存储

note 看起来并不能解决上面的问题,但是确实解决了审计问题,因此我已经提到了

3。记录库

您必须确认日志库如果无法添加审核日志,则会引发异常。

如果不这样做,那么您将丢失可审核的日志,那么您将无法与审核员建立信任

旁注1-使用选项1和3,您可能需要确保将日志写入与主数据存储区相同的事务中。确保所有信息均为ACID。 (这类似于人们发布数据库事务之外的事件时遇到的问题)

注释2-审核日志应该能够识别谁做了什么,因此您可能/应该加密最终存储在其中的数据存储。