【问题标题】:Keep a log of user events in rails在 Rails 中记录用户事件
【发布时间】:2011-08-29 20:47:46
【问题描述】:

我目前正在尝试为我的 rails 应用程序的管理部分实现日志。这将允许管理员查看用户执行了哪些操作以及何时执行。例如“用户添加了新地址”、“用户将邮政编码从 X 更新为 Y”。

由于每个操作都可能涉及许多模型,而不仅仅是用户,因此我制作了一个日志模型,其中包含所有其他系统模型 ID、一条消息和一个日志代码的字段。

class CreateLogs < ActiveRecord::Migration
  def self.up
    create_table :logs do |t|
      t.integer :user_id
      t.integer :marker_id
      t.integer :administrator_id
      t.integer :group_id
      t.integer :assignment_id
      t.integer :submission_id
      t.integer :code
      t.text :message

      t.timestamps
    end
  end

  def self.down
    drop_table :logs
  end
end

我担心的是,例如,用户可以(比方说)向他们的帐户添加一个分配,它会被记录为

Log.create(:user_id => current_user.id, :assignment_id => the_assignment.id, :code => 342, :message => '')

(代码 342 对应于“用户创建了一个新地址”,因此不需要消息)

显然,在日志视图中,我可以从日志 ID/详细信息中提取相关用户和地址信息,但如果要删除此用户或地址,则所有这些信息都将不可用,因此回顾日志,输入基本没用。

必须有更好的方法或已经存在的东西来帮助记录此类系统事件并应对潜在的删除。

或者,我可以将整个条目存储为文本消息,但这不是很糟糕并且不必要地填充数据库吗?

如果有任何不清楚的地方,请告诉我,只是想记录应用程序操作/事件之前必须完成!

谢谢,

皮特

【问题讨论】:

    标签: ruby-on-rails database activerecord logging action


    【解决方案1】:

    看看ActiveRecord Versioning上列出的宝石,它可能就是你需要的。

    【讨论】:

    • 这看起来很有希望,尤其是看起来像文件跟踪,但它只能保存一个版本/日志以供模型更改时使用,对吗?如果我想单独手动指定每个更改怎么办?或者,如果执行的操作不一定会更改模型,但会执行其他操作,例如发送电子邮件?
    • 是的,版本控制/审核通常仅由记录更改触发。如果您需要记录不一定会触发数据库更改的自定义操作,则需要创建自己的记录器。
    【解决方案2】:

    我认为您找到了一个很好的解决方案,即使用原始文本而不是(或除了)ID。如果您要存储用户名和地址,它可能不会破坏任何存储容量。这几乎就是日志文件的工作方式;它吐出谁做了什么,什么时候发生的。我认为在文本中存储一些额外的数据根本不会妨碍您的数据库。但是,如果它确实变得庞大,您总是可以只保留最近几周的日志。也许有某种工作可以清除任何超过 4 周的日志文件。但这主要取决于您所做的记录级别:如果您记录用户所做的每一个操作,那么这会变得非常大。如果您只是对关键事件(用户登录/注销、创建/更新/删除某些内容等)感兴趣,那么我认为您可以存储文本并每隔一段时间清理一次。

    【讨论】:

      猜你喜欢
      • 2012-07-18
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      • 2017-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-17
      相关资源
      最近更新 更多