Rails:在lib目录中记录代码?

drt*_*drt 37 ruby logging ruby-on-rails

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

Sté*_*hen 39

有两种方法可以解决这个问题:

  • 假设您的库是自包含的并且具有模块,您可以logger向模块添加属性并在库代码中的任何位置使用该属性.

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

    module MyLibrary
      mattr_accessor :logger
    end
    
    Run Code Online (Sandbox Code Playgroud)

    这仍然允许您使用Rails之外的脚本中的自包含库.哪个好,有时候.

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

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

  • 注意:这个答案包含不正确的信息,编辑不希望我修复它们.除非(也许)你使用的是超过2.0的Rails,否则你不是"处理标准的Ruby Logger".Rails现在使用[ActiveSupport :: BufferedLogger](http://apidock.com/rails/ActiveSupport/BufferedLogger).如果您决定为(例如)Rails项目中包含的cron作业实例化单独的记录器,以避免"污染"标准Rails日志.在这种情况下,请确保使用`ActiveSupport :: BufferedLogger.new`而不仅仅是`Logger.new`.我试过了,但没用. (3认同)

Nad*_*sin 19

我们可以直接使用Rails logger进入lib,参见下面的代码片段.

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..."
Run Code Online (Sandbox Code Playgroud)

  • 在我意识到我需要<require'logger'>之后,这最终对我有用.一旦你知道它,这是非常明显的,但对我来说暂时并不明显. (4认同)