【问题标题】:Best way to add logger for ActiveResource为 ActiveResource 添加记录器的最佳方法
【发布时间】:2015-01-26 21:28:19
【问题描述】:

为所有ActiveResource in rails 添加记录器的最佳方法是什么?

在我的应用程序中,我有一些通过 ActiveResource 调用 API 的方法,有时会出现 TimeOut 错误。

所以,我只想 log the urlmethod(get/post) 和记录器中的一些与 url 相关的东西,它会给出 TimeOut 或任何其他错误。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 logging activeresource


    【解决方案1】:

    如何在 Rails 中为 ActiveResource 添加记录器?

    ActiveResource 实例化一个新的记录器

     ## config/environment.rb
    
     logger = Logger.new('log/active_resource.log')
     logger.level = Logger::DEBUG 
     ActiveResource::Base.logger = logger
    

    我需要添加一些自定义消息

    用你的覆盖ActiveResource 的异常处理程序。查看source

    Monkey-patch下面的库函数

     ## create config/initializers/active_resource_patch.rb
    
     module ActiveResource
       class TimeoutError
         def to_s
          @message + " my custom message"
         end
       end
     end
    

    我已修改超时错误以显示自定义消息。

    【讨论】:

    • 很好,但是有什么办法可以让我的页面不崩溃,只保存日志。实际上我们目前正在使用 begin-rescue 并在救援块中使用日志
    • @Salil ActiveResource raise 很多这些自定义异常。我相信您必须评论/修补所有这些代码才能实现它。显然,这是一项乏味的任务,因为您不能静音 raise
    【解决方案2】:

    您可以通过将其添加到您的config/environment.rb 来为 ActiveResource 定义一个新的记录器:

     logger = Logger.new('log/active_resource.log', 'daily');·
     logger.level = Rails.env.dev? ? Logger::DEBUG : Logger::INFO;·
     ActiveResource::Base.logger = logger
    

    如果您只想记录错误,则只能将其用于Logger::Error

     logger = Logger.new('log/active_resource.log', 'daily');·
     logger.level = Logger::Error
     ActiveResource::Base.logger = logger
    

    要进行自定义异常处理,我建议将 ActiveResource 异常处理的 source file 复制到 config/initializers/ 并根据您的需要更改文件。这样您就可以控制异常的行为,并且由于存在不同类型的异常,您将能够自定义所有异常。

    【讨论】:

    • 是的,但我想要一种通用方法,当发生任何错误时,我可以使用该方法将内容记录到其中。
    • @Salil 我已经用只记录错误的方式更新了答案。
    • 谢谢,但我还需要添加一些自定义消息,我认为上面的代码不可能。所以,请让我知道如何添加自定义消息,我会接受答案。
    【解决方案3】:

    不确定您要添加哪种类型的自定义消息。也许您可以选择 Logger Inheritance :

    class CustomLogger < Logger
      def self.error(message)
        super(message  + ' my custom message')
      end
    end
    
    #added code from Paulo Fidalgo
    logger = CustomLogger.new('log_location', 'daily')
    logger.level = Logger::ERROR
    ActiveResource::Base.logger = logger
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-16
      • 2012-08-15
      • 1970-01-01
      • 2015-12-03
      • 2011-07-29
      • 1970-01-01
      • 1970-01-01
      • 2020-08-13
      相关资源
      最近更新 更多