0

我最近发现了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

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

那么有没有办法在我执行块时向有效负载添加任何自定义值?

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 回答