Open7

Railsによるログフィルタリング

philomagiphilomagi

#parameters は利用側が最終的に何かしら定義していることを要求するもの。
template method。
こうした事後的に満たされるべき事項は、もうちょっと目立つようにしてほしい。

具体的にこのメソッドを実装しているものとしては ActionDispatch::Http::Parameters など。
https://github.com/rails/rails/blob/ee8134d6f98660fb4de66e2bafc2e8d8df2ca593/actionpack/lib/action_dispatch/http/parameters.rb#L50-L63

ActionDispatch::Http::Parameters はさらに ActionDispatch::Request で使用。
https://github.com/rails/rails/blob/ee8134d6f98660fb4de66e2bafc2e8d8df2ca593/actionpack/lib/action_dispatch/http/request.rb#L17-L27

philomagiphilomagi

fetch_headerset_header で設定された何かしらの値を取得する?
https://github.com/rails/rails/blob/ee8134d6f98660fb4de66e2bafc2e8d8df2ca593/actionpack/lib/action_dispatch/http/parameters.rb#L51-L60

get_header との違いは?
Hash::[]Hash::fetch みたいな関係?(ブロックの利用可否、デフォルト値の評価など)

結局、どこで定義されている?
とりあえず、現時点で重要な箇所ではないので先送り。

philomagiphilomagi
  1. controller?
  2. ActionDispatch::Request#filtered_parameters
  3. ActionDispatch::Http::FilteredParameter#filtered_parameters
    1. ActionDispatch::Http::Parameters#parameteres
    2. ActiveSupport::ParameterFilter#filter
    3. ActiveSupport::ParameterFilter::CompiledFilter.compile
    • filter は文字列・正規表現・ブロックのケースあり
    • compile = 文字列をマッチ無し かつ | で連結された正規表現に置換
    1. ActiveSupport::ParameterFilter::CompiledFilter#call

最終的に正規表現で各値を置換している(コレ自体は、まあ予想通り)
https://github.com/rails/rails/blob/ee8134d6f98660fb4de66e2bafc2e8d8df2ca593/activesupport/lib/active_support/parameter_filter.rb#L113-L135

philomagiphilomagi

https://qiita.com/kakkunpakkun/items/4639bc653924e2dc8dbe

この[FILTERED]にする仕組みはActionDispatch::Http::ParameterFilterを使って実現されています。

リクエストパラメータをフィルタする仕組みは ActionDispatch::Http::ParameterFilter を使って実現している、が正確なところか。
このフィルタの仕組みを再利用するなら、 ActionDispatch::Http::ParameterFilter ではなく ActiveSupport::ParameterFilter を利用することを検討した方が良さげ?
実際、HTTPが関係ないところで ActionDispatch::Http::ParameterFilter を利用するのは抵抗ある。