要求
我想保留特定事件的审核日志,例如:
- 用户登录成功
- 用户无法登录(原因:密码错误、未确认等)
- 超级用户修改了其他用户的详细信息(他们所做的更改)
- 等等
该日志应包括以下详细信息:
- 执行操作的登录用户(基于控制器的
current_user
) - 被修改的记录(如超级用户的其他用户记录)
- 该操作的请求 IP 地址
此日志还应该存储在文件系统上的文件中,而不是数据库表中,以便稍后可以由机器上的另一个服务摄取。
一些可能性
以下是我迄今为止考虑过的方法的简短列表:
活动记录::观察者
观察者提供了一种很好的分离方式来观察这些特定事件。
然后我可以让观察者附加到一个日志文件,但我不确定我能多么容易地获得这种调用的结果(例如登录失败或工作),我需要以某种方式调用控制器方法current_user
查找登录用户并获取HTTP请求以获取IP地址。
审计 gem(如 audited、auditable、paper_trail 等)
这些 gem 可以方便地知道如何访问当前用户和 IP 地址的控制器,但它们都记录到数据库中的审计表中。Auditable
特别好,因为它可以审核对象上的任何方法调用,而不仅仅是 AR 回调,但我可能需要修补它以写入文件而不是数据库.. 还是什么?
ActiveSupport::通知
我仍然需要阅读此内容,但我相信它提供了一种在 Rails 中订阅低级别事件的低级别方式。对于这种情况,这可能太低级了,但我需要进一步调查。
日志4r
看起来这将是一个很好的日志文件,但我认为它没有任何方式来监视事件。这只是问题的一部分。
有什么建议吗?
是否有这样做的最佳实践方式?你能推荐任何从以前的经验中学到的宝石或教训吗?还有什么我应该考虑的吗?