ActiveSupport::Notifications と ActiveSupport::LogSubscriber によるログ記録処理
Rails の ActiveSupport::Notifications の使いどころがよくわからず、情報を集めているところです。
- http://railscasts.com/episodes/249-notifications-in-rails-3
- http://asciicasts.com/episodes/249-notifications-in-rails-3
一例として見つかったのが以下の記事。
上記記事によると、ActiveSupport::LogSubscriber によるログ記録処理で使われる様子。これ(LogSubscriber)は、ActiveRecord の SQL デバッグログ等で使われています。
以下にサンプルを挙げてみます。
まず、ActiveSupport::LogSubscriber を継承して各種サービス用のサブスクライバを作成します。以下では、sample というサービス(ネームスペース)用のサブスクライバを作成しています。
module Sample class LogSubscriber < ActiveSupport::LogSubscriber def do_something(event) debug "#{event.payload.inspect}: #{event.duration} s" end end end
次に、作成したサブスクライバで通知を受け取れる様に登録します。
この際、自動的に Sample::LogSubscriber の public メソッドをイベント名として、"メソッド名.ネームスペース" という形で ActiveSupport::Notifications.subscribe のパターンに渡している様です。
Sample::LogSubscriber.attach_to :sample
最後に、実際にログが記録されるか確認します。
ActiveSupport::Notifications.instrument('do_something.sample', :payload => 'payload')
上記の例では、ログには以下の様に書き出されます。
{:payload=>"payload"}: 0.005 s
以下は API ドキュメントです。