ActiveSupport::Notifications と ActiveSupport::LogSubscriber によるログ記録処理

RailsActiveSupport::Notifications の使いどころがよくわからず、情報を集めているところです。

一例として見つかったのが以下の記事。

上記記事によると、ActiveSupport::LogSubscriber によるログ記録処理で使われる様子。これ(LogSubscriber)は、ActiveRecordSQL デバッグログ等で使われています。

以下にサンプルを挙げてみます。

まず、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 ドキュメントです。