我最近发现了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
现在我可以订阅它并且还可以获取已执行的查询(可在有效负载哈希中使用)。但我也希望在订阅者中看到结果。
那么在我执行块的时候有没有办法在有效载荷中添加任何自定义值?
答案 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