在整个 Rails 4 应用程序中记录自定义 New Relic 属性的正确方法

问题描述 投票:0回答:1

我正在使用 New Relic 来监控我的 Rails 4.2 应用程序,它运行良好。

但是,当 New Relic 向我报告错误时,我希望能够知道哪个用户遇到了错误。

我已经阅读了this,我相信它解释了如何在每个控制器的基础上添加自定义属性。

但是,就我而言,我想将

current_user.id
记录为整个 整个 应用程序中的自定义属性。

我的第一个想法是将以下内容放入

applications_controller.rb

class ApplicationController < ActionController::Base

  ::NewRelic::Agent.add_custom_parameters(
    :user_name => current_user.full_name rescue "Not a logged-in user.",
    :user_id => current_user.id rescue "Not a logged-in user."
  )

...但这导致了服务器错误。

有什么建议吗?

更新/解决方案

我上面所做的事情有两个问题。首先,我使用

rescue
的方式不正确。其次,我需要创建一个方法来添加这些自定义属性 并使用 ApplicationController
 在所有内容之前在 
before_filter
 中调用该方法。这是最终对我有用的示例:

class ApplicationController < ActionController::Base # attempt to gather user and organization attributes before all controller actions for New Relic error logging before_filter :record_new_relic_custom_attributes def record_new_relic_custom_attributes # record some custom attributes for New Relic new_relic_user_id = current_user.id rescue "Not a logged-in user." new_relic_user_name = current_user.full_name rescue "Not a logged-in user." new_relic_user_email = current_user.email rescue "Not a logged-in user." new_relic_organization_id = current_organization.id rescue "Not a logged-in user." new_relic_organization_name = current_organization.name rescue "Not a logged-in user." new_relic_organization_email = current_organization.email rescue "Not a logged-in user." ::NewRelic::Agent.add_custom_parameters( :user_id => new_relic_user_id, :user_name => new_relic_user_name, :user_email => new_relic_user_email, :organization_id => new_relic_organization_id, :organization_name => new_relic_organization_name, :organization_email => new_relic_organization_email ) end

更新2 根据下面的一位评论者的说法,在这种情况下使用 rescue

 并不理想,相反我应该使用 
try
:

new_relic_user_id = current_user.try(:id) || "Not a logged-in user."
    
ruby-on-rails newrelic
1个回答
6
投票
您可能希望将该代码包含在过滤器中,以便它在控制器操作之前运行,例如:

class ApplicationController < ActionController::Base before_filter :set_new_relic_user def set_new_relic_user ::NewRelic::Agent.add_custom_parameters( user_name: current_user&.full_name || "Not a logged-in user.", user_id: current_user&.id || "Not a logged-in user." ) end end
    
© www.soinside.com 2019 - 2024. All rights reserved.