我们仍在使用旧的经典 ASP,并且希望在用户在我们的应用程序中执行某些操作时进行记录。我们将编写一个通用子例程来获取我们想要记录的详细信息。
我们应该使用 FileSystemObject
将其记录到 txt 文件中,还是记录到 MS SQL 数据库中?
在数据库中,我们应该向现有数据库添加一张新表还是应该使用单独的数据库?
最佳答案
编辑
事后看来,更好的答案是登录到两个文件系统(首先,立即),然后登录到集中式数据库(即使延迟)。大多数现代日志记录框架都遵循发布-订阅
模型(通常称为日志记录源和接收器),这将允许定义多个日志记录接收器(目标)。
写入文件系统背后的基本原理是,如果网络、数据库或安全问题等外部基础设施依赖项阻止您远程写入,那么如果您可以从服务器的硬盘恢复数据(某些东西),那么至少您可以回退类似于航空业的黑匣子)。写入文件系统的日志数据在确认中央数据库已记录数据后即可删除,因此一般情况下文件系统保留大小或轮换次数不需要很大。
企业日志管理器,如 Splunk可以配置为抓取本地服务器日志文件(例如由 log4net
、EntLib Logging Application Block
等编写的),然后将它们集中在可搜索的数据库中,其中记录的数据可以被挖掘、绘制图表、显示在仪表板上等。
但从操作角度来看,您可能拥有一个服务器场或服务器集群,并且假设本地文件系统和远程数据库日志记录机制都正常工作,99% 的用例实际上是尝试查找日志文件中的任何内容仍将通过中央数据库进行(理想情况下具有良好的前端系统,允许您从日志数据查询、聚合、绘制图表并构建触发器或通知)。
原始答案
如果您有数据库,我建议使用它来代替文件系统来进行审计记录。
理由:
- 数据的类型化和规范化分类(
严重性、操作类型、用户、日期...
) - 与 Grep 相比,查找审计数据更容易(
select ... from Audits where ...
) - 更容易清理(例如
Delete from Audits where = Date ...
) - 备份更容易
决定使用现有数据库还是新数据库取决于 - 如果您有多个应用程序(具有自己的数据库)并且希望集中记录/审核所有应用程序中的所有操作,那么集中式数据库可能会有意义。
既然您说要审核用户事件,那么在与用户表/定义相同的数据库中进行审核可能是有意义的(如果适用)。
关于sql-server - 记录到文件还是数据库更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3458813/