【问题标题】:Avoid ActiveRecord#save logging of large fields避免 ActiveRecord#save 记录大字段
【发布时间】:2011-04-20 17:49:18
【问题描述】:

我需要阻止 ActiveRecord#save 记录大字段的内容。

有没有办法在 Rails 2.3.x 上进行配置?

@document.save #=> Will log something like:

Apr 20 13:45:42 ubuntu rails[2619]: Document::HTML Update (7.0ms)   UPDATE `documents` SET `some_meta_data` = 1, `more_meta_data` = 2, `document_content` = '\n\n\n<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional.....................'
Apr 20 13:45:42 ubuntu rails[2619]: SQL (5.8ms)   COMMIT

我不想记录字段document_content,因为它的类型是mysql'text'。

【问题讨论】:

    标签: mysql ruby-on-rails activerecord ruby-on-rails-2 ruby-1.8


    【解决方案1】:

    如果您使用的是 rails 3,请在 config/application.rb 中执行以下操作:

    config.filter_parameters += [:password, :document_content]
    

    然后重新启动您的应用程序。从那时起,如果我没记错的话,日志上应该会显示类似'document_content' = [ FILTERED ] 的内容。

    如果您使用的是 rails 2,则需要将以下内容放入控制器中:

    filter_parameter_logging :document_content
    

    如果需要,您可以附加逗号分隔的字段列表。

    【讨论】:

    • @elgalu 我编辑了问题以添加 Rails 2 支持。但是,我只使用过 rails 3,所以让我知道它是否有效。
    • 不幸的是,这只是过滤了 HTTP 参数的日志记录,但仍然记录了 ActiveRecord#save sql 查询。
    • @elgalu 没错,使用 SQL 日志记录是全有或全无。如果您真的愿意,您可以在开发模式下关闭 SQL 日志记录。在生产模式下,SQL 日志记录默认是关闭的。
    • 是的,我需要这个作为开发日志,因为我不想在开发时看到大的字段值,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-04-27
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多