【问题标题】:ActiveSupport::Notifications access payload from inside blockActiveSupport::Notifications 从块内部访问有效负载
【发布时间】:2012-06-08 16:21:32
【问题描述】:

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

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

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

【问题讨论】:

    标签: ruby notifications activesupport


    【解决方案1】:

    当我在寻找同样的东西时偶然发现了你的问题。

    您可以简单地传入一个块变量,它将代表您的有效负载,您可以在块中时填充它

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-20
      • 2017-05-12
      • 2020-04-18
      相关资源
      最近更新 更多