我有一个web应用程序,我想审计应用程序上的大多数用户操作,例如登录,插入到db,更新到db,触发异常等。
我的一位高级工程师建议使用队列来获得更快的性能,因此您只需将事件排队,然后它就会自动处理,而不必等待它被处理。
你有什么建议?我应该如何处理它们?将它们加入队列没有问题,但我不确定如果没有调用方法,它们将如何被处理。
我正在使用c#和。net 4.0
我一直在研究一个可能会有所帮助的库。
审计。. NET和它的扩展来审计不同的系统(WCF, MVC, WebApi, EF)和存储日志在不同的数据存储(SQL, MongoDB, DocumentDB, File, EventLog)将给你灵活性配置什么你想要审计和在哪里你想要存储审计日志 。
我只是推荐一个现成的、稳定的、受支持的日志框架。您是否考虑过日志框架,比如log4net?
如果你愿意,你可以写一个自定义的appender来登录到MSMQ。
另一个日志记录器称为TracerX。它是用c#编写的,快速而灵活。由于源代码是可用的,这意味着您可以根据自己的需要对其进行修改。它带有一个查看器,允许过滤输出。
https://github.com/MarkLTX/TracerX和一篇如何使用它的文章:
http://www.codeproject.com/KB/dotnet/TracerX.aspx实际上有两个感兴趣的主题:
- 异步日志
- 面向方面的特性
异步日志记录可以将繁重的处理速度提高100倍。使用一个写入线程,每隔100毫秒将队列转储到日志接收器,但是日志引擎必须确定地启动和停止,以便它可以在应用程序停止时刷新接收器。
面向方面编程解决了您的横切关注点-审计/日志调用应在所需的操作序言/尾声中调用-查看PostSharp项目
(有点晚了,这篇文章在谷歌上显示很高,所以我认为它可能值得看看一些选项)
如果你想实际审计。(我的意思是记录一个行动发生了,是谁做的,什么时候做的,并且这个可审计的日志能够作为对外部审计员的证据)
(调试日志与审计日志)
如果是,您可以考虑一些选项,例如:
- 使用审计日志库
- 采用EventStore数据库
- 使用一个大声失败的日志库
1。使用审计库
- 审计。. NET已经在这里提到过了,它的下载量令人印象深刻,而且功能非常丰富
- auditable -上述的替代(免责声明,它是由我写的)
都很酷,因为它们允许你自带数据存储
2。eventsource
- EventStore Postgres with Marten
这里的设计(它可以影响你的架构来包含事件)是不可变的,如果你存储它们,那么你就有了一个可审计的存储系统中发生的事情
注意这看起来并没有解决上面的问题,但它确实解决了如何审计,所以我提到了
3。日志库
- seriog - Issue
你必须确认日志库如果添加审计日志失败,它将抛出异常。
如果它不这样做,那么你将丢失可审计的日志,然后你就不能与你的审计员建立信任
旁注1 -对于选项1和3,您可能需要确保日志写入与主数据存储相同的事务中。以确保所有的信息都是ACID。(这类似于人们在发布数据库事务之外的事件时遇到的问题)
旁注2 -审计日志应该能够识别谁做了什么,所以你可能/应该需要加密他们最终的数据存储