【问题标题】:Rails: Logging for code in the lib directory?Rails:在 lib 目录中记录代码?
【发布时间】:2011-02-28 03:49:18
【问题描述】:

为保存在 lib 目录中的代码配置日志记录的最佳/最简单方法是什么?

【问题讨论】:

    标签: ruby-on-rails ruby logging


    【解决方案1】:

    有两种方法:

    • 假设您的库是独立的并且有一个模块,您可以将logger 属性添加到您的模块并在您的库代码中的任何地方使用它。

      module MyLibrary
        mattr_accessor :logger
      end
      

      然后,您可以使用config/initializers/ 中的初始化程序或config/environment.rb 中的config.after_initialize 块来初始化您的记录器,如下所示:

      require 'mylibrary'
      MyLibrary.logger = Rails.logger
      

      这仍然允许您从 Rails 之外的脚本中使用自包含库。这很好,偶尔。

    • 如果在没有 Rails 的情况下使用库真的没有意义,那么你也可以直接使用 Rails.logger

    在任何一种情况下,您都在处理标准的 Ruby Logger。还要记住,理论上,记录器可能是nil

    【讨论】:

    • 谢谢,这正是我想要的。
    • 注意:此答案包含不正确的信息,编辑不希望我修复它们。除非(也许)您使用的是早于 2.0 的 Rails,否则您不是“处理标准的 Ruby Logger”。 Rails 现在使用ActiveSupport::BufferedLogger。如果您决定为(例如)包含在 Rails 项目中的 cron 作业实例化一个单独的记录器,以避免“污染”标准 Rails 日志。在这种情况下,请确保使用 ActiveSupport::BufferedLogger.new 而不仅仅是 Logger.new。我试过了,它没有用。
    【解决方案2】:

    我们可以直接在lib中使用Rails logger,见下面sn-p。

    require 'logger'
    
    Rails.logger.info "Hay..!!! Im in lib"
    Rails.logger.debug "Debugging this object from Lib #{object.inspect}"
    Rails.logger.error "This is an error..."
    

    【讨论】:

    • 这对我有用,最后,在我意识到我需要 之后。这是完全显而易见的,一旦你知道了,但有一段时间对我来说并不明显。
    • 缺点是你的库代码现在依赖于提供记录器的 Rails,不能独立使用。
    猜你喜欢
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 2012-12-03
    • 2015-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多