在rake任务中使用rails logger,rails 5

时间:2016-12-19 16:56:07

标签: ruby-on-rails ruby logging rake-task

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

我在lib / tasks中执行了rake任务,并且我已经在production.rb和developement.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

摘自develop.rb,我已经定义了记录器:

 config.logger = Logger.new(STDOUT)
 config.log_level = :info
 config.logger = ActiveSupport::TaggedLogging.new(logger)

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

解答: 只需添加@Joel_Blum答案中给出的环境标记即可。另外,在development.rb中,行

config.logger = ActiveSupport::TaggedLogging.new(logger)

需要:

config.logger = ActiveSupport::TaggedLogging.new(config.logger)

1 个答案:

答案 0 :(得分:4)

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

 task :scrape_info => :environment do
  ...
 end