在Rails中过滤长日志参数

Dra*_*fly 7 ruby logging ruby-on-rails ruby-on-rails-3

我允许用户在我的网站上传文件.其中一些文件可能非常大,它占用了我的大量日志文件.所以我不希望它出现.我知道:

config.filter_parameters += [:password]
Run Code Online (Sandbox Code Playgroud)

过滤某些参数.但问题是它的参数是这样的哈希:

{
   :person => { 
      :name => 'bob', 
      :file => { 
         :data => 'really long data. this can be tens of thousands of characters long' 
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

我可以将数据添加到filter_parameters但是这会在整个站点中隐藏大量日志,因为数据是一个公共密钥(我也无法将其重命名为更加模糊的东西).filter_parameters是否可以接受嵌套参数?或者是否有另一种限制所有参数长度的方法,因此如果它们大于某个大小,它将不会存储在我的日志文件中.

Dra*_*fly 8

我最终在我的application.rb中放了这样的东西

config.filter_parameters << lambda do |k, v|
  if k == 'data' && v && v.class == String && v.length > 1024
    v.replace('[FILTER]')
  end
end
Run Code Online (Sandbox Code Playgroud)

我找不到更好的方法来做到这一点.所以我在params中寻找关键的"数据".如果该数据的值是一个字符串并超过一定长度,我只需将其替换,以便日志不会那么混乱.