Railsによるログフィルタリング
この[FILTERED]にする仕組みはActionDispatch::Http::ParameterFilterを使って実現されています。
ActiveSupport::ParameterFilter#filter
↑の呼び出し元ActionDispatch::Http::FilterParameters#filtered_parameters
fetch_header
によってどこからかfilter一覧を取ってくる、未定義なら空のfilter一覧を持ってくる?( fetch_header
の定義箇所不明。 activesupport/core_ext?)
#parameters
は利用側が最終的に何かしら定義していることを要求するもの。
template method。
こうした事後的に満たされるべき事項は、もうちょっと目立つようにしてほしい。
具体的にこのメソッドを実装しているものとしては ActionDispatch::Http::Parameters
など。
ActionDispatch::Http::Parameters
はさらに ActionDispatch::Request
で使用。
fetch_header
→ set_header
で設定された何かしらの値を取得する?
get_header
との違いは?
→ Hash::[]
と Hash::fetch
みたいな関係?(ブロックの利用可否、デフォルト値の評価など)
結局、どこで定義されている?
とりあえず、現時点で重要な箇所ではないので先送り。
- controller?
ActionDispatch::Request#filtered_parameters
-
ActionDispatch::Http::FilteredParameter#filtered_parameters
ActionDispatch::Http::Parameters#parameteres
ActiveSupport::ParameterFilter#filter
ActiveSupport::ParameterFilter::CompiledFilter.compile
- filter は文字列・正規表現・ブロックのケースあり
- compile = 文字列をマッチ無し かつ
|
で連結された正規表現に置換
ActiveSupport::ParameterFilter::CompiledFilter#call
最終的に正規表現で各値を置換している(コレ自体は、まあ予想通り)
この[FILTERED]にする仕組みはActionDispatch::Http::ParameterFilterを使って実現されています。
リクエストパラメータをフィルタする仕組みは ActionDispatch::Http::ParameterFilter
を使って実現している、が正確なところか。
このフィルタの仕組みを再利用するなら、 ActionDispatch::Http::ParameterFilter
ではなく ActiveSupport::ParameterFilter
を利用することを検討した方が良さげ?
実際、HTTPが関係ないところで ActionDispatch::Http::ParameterFilter
を利用するのは抵抗ある。