0

最近、ActiveSupport::Notificationsについて知りました。アプリケーションを監視するための優れたツールだと思います。

現在、Sinatra アプリを監視するために Rails の外で使用していますが、うまく機能しています。

ただし、カスタムクエリを計測するためによく使用し、何らかの方法でクエリの結果を通知したいと考えています。

my_input = "some_query"
ActiveSupport::Notifications.instrument("myapp.create", :input => my_input) do
  #stuff
  result = search_for my_input
  #stuff
  result
end

これで、これをサブスクライブして、実行されたクエリを取得することもできます (これはペイロード ハッシュで利用できます)。しかし、サブスクライバーでも結果を確認したいと思います。

ブロックの実行中にカスタム値をペイロードに追加する方法はありますか?

4

1 に答える 1

7

私が同じものを探していたときに、ちょうどあなたの質問に出くわしました。

ブロック変数を渡すだけで、ペイロードを表し、ブロック内にいる間にそれを埋めることができます

my_input = "some_query"
ActiveSupport::Notifications.instrument("myapp.create", :input => my_input) do |instrument|
  #stuff
  result = search_for my_input
  instrument[:my_result] = result
  #stuff
  result
end

サブスクライバーで、渡された引数から新しいイベントを作成します。

ActiveSupport::Notifications.subscribe("myapp.create") do |*args|
  event = ActiveSupport::Notifications::Event.new(*args)
  Rails.logger.info event.payload
end
于 2012-08-30T09:43:53.443 に答える