ActiveSupport::OrderedHash

目次

$ ruby -v
ruby 2.1.0dev (2013-09-22 trunk 43011) [x86_64-darwin12.5.0]
$ bundle exec ruby -r active_support -e 'puts ActiveSupport::VERSION::STRING'mi
4.0.0

Logger のフォーマッターを改良し、タグ付け可能にする。 タグは [タグ名] の形式で出力される。

インスタンスの作成には

logger = ActiveSupport::TaggedLogging.new(Logger.new(STDOUT))

とします。ブロック内で一時的にタグを付与したい場合は tagged メソッドを使い、単にタグを付与したい場合は push_tags メソッドを利用します。 タグはスタックのように蓄積するので、タグをひとつだけ削除するには pop_tags を使用します。 まとめて削除したい場合は clear_tags! メソッドがあります。

require 'active_support/core_ext/module/delegation'
require 'active_support/tagged_logging'

logger = ActiveSupport::TaggedLogging.new(Logger.new(STDOUT))
logger.info 'hoge'
# output => hoge
logger.tagged('mogu') { logger.info 'hoge' }
# output => [mogu] hoge
logger.tagged('mogu','goro') { logger.info 'hoge' }
# output => [mogu] [goro] hoge

logger.push_tags('mogu')
logger.info 'hoge'
# output => [mogu] hoge
logger.pop_tags
logger.info 'hoge'
# output => hoge

ActiveSupport::TaggedLogging

クラスではなくモジュール。.new メソッドにより 受けとったオブジェクトに extend することで Logger のインスタンスを拡張します。 logger.formatter にも機能拡張を行い、基本的にはそこへ delegate して動作する。タグの情報はスレッドローカルな変数へ保存される。

.new

引数 logger にフォーマットの指定をして、メソッドを追加する。

#push_tags

タグを設定する。 formatter へ処理を委譲する。

ActiveSupport::TaggedLogging::Formatter に基本的な機能がある。

#pop_tags

タグをひとつ捨てる。 formatter へ処理を委譲する。

ActiveSupport::TaggedLogging::Formatter に基本的な機能がある。

#clear_tags!

タグをすべて破棄する。

formatter へ処理を委譲する。

ActiveSupport::TaggedLogging::Formatter に基本的な機能がある。

#tagged

tags を一時的にタグへ追加し渡されたブロックの処理を行う。

formatter へ実質処理を委譲している。

ActiveSupport::TaggedLogging::Formatter に基本的な機能がある。

#flush

タグをすべて破棄して親クラスの動作に従う。

ActiveSupport::TaggedLogging::Formatter

loggerのformatter に タグの出力機能を追加する。 タグのフォーマットは [タグ名] となる。

#call

このメソッドは logger のイベントがよばれた際に呼ばれるメソッドなので、 メソッドをオーバライドして、タグの情報が付加されるようにしてある。

#tagged

一時的に push_tags をしておき ブロックの実行を終了すると、push したタグをすべて pop_tags するようになっている。

#push_tags

空白のタグは捨てるようになっており、tagsに指定されたタグを追加する。

#pop_tags

引数size だけ設定されているタグを破棄する。

#clear_tags!

設定されているタグをすべて破棄する。

current_tags

現在設定されているタグをすべて返す。