在 rake 任务中使用 rails 记录器,rails 5

Nat*_*uer 5 ruby logging ruby-on-rails rake-task

我正在使用 rails 5 构建一个 ruby​​ on rails 应用程序,并且我有许多 rake 任务,我想从中记录信息。但是,当我尝试访问记录器时,出现错误:未定义的局部变量或方法“记录器”

我在 lib/tasks 中有我的 rake 任务,并且我已经在 production.rb 和 development.rb 中声明了一个记录器

这是一个示例任务:

namespace :some_namespace do
    desc "a description"
    task :scrape_info do
        include Scraper
        startTime = Time.now
        Rails.logger.tagged("Scraper") { Rails.logger.info "Beginning scrape: #{startTime} " }
        Scraper.scrape_info
        endTime = Time.now
        Rails.logger.tagged("Scraper") { Rails.logger.info "Finished scrape: #{endTime} " }
    end
end
Run Code Online (Sandbox Code Playgroud)

以及我定义记录器的 development.rb 的摘录:

 config.logger = Logger.new(STDOUT)
 config.log_level = :info
 config.logger = ActiveSupport::TaggedLogging.new(logger)
Run Code Online (Sandbox Code Playgroud)

知道如何将记录器合并到 rake 任务中吗?我知道我可以简单地使用 puts 语句打印到标准输出,但最终我希望有每日日志文件,并且我希望我的 rake 任务包含在这些文件中

答案: 只需添加@Joel_Blum 的答案中给出的环境标签。此外,在 development.rb 中,该行

config.logger = ActiveSupport::TaggedLogging.new(logger)
Run Code Online (Sandbox Code Playgroud)

需要是:

config.logger = ActiveSupport::TaggedLogging.new(config.logger)
Run Code Online (Sandbox Code Playgroud)

Joe*_*lum 5

尝试添加环境,这将具有加载 Rails 应用程序的效果。

 task :scrape_info => :environment do
  ...
 end
Run Code Online (Sandbox Code Playgroud)