ActiveSupport :: Notifications从内部块访问有效负载

时间:2012-06-08 16:21:32

标签: ruby notifications activesupport

我最近发现了ActiveSupport::Notifications。我认为这是一个监控应用程序的好工具。

我目前正在Rails之外使用它来监控我的Sinatra应用程序,它运行良好。

但是我经常使用它来检测自定义查询,并希望以某种方式通知查询结果:

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

现在我可以订阅它并且还可以获取已执行的查询(可在有效负载哈希中使用)。但我也希望在订阅者中看到结果。

那么在我执行块的时候有没有办法在有效载荷中添加任何自定义值?

1 个答案:

答案 0 :(得分:5)

在我寻找同样的事情时,偶然发现了你的问题。

你可以简单地传入一个块变量,它会代表你的有效载荷,你可以在块中填充它

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