Rails:如何在生产模式下从rake任务中写入自定义日志文件?

时间:2010-05-18 17:21:12

标签: ruby-on-rails logging rake web-crawler

我正在尝试在运行rake任务时写入我的日志文件。它在开发模式下工作正常,但是当我切换到生产环境时,没有任何内容写入日志文件。

我在这里读到

How do I use a custom log for my rake tasks in Ruby on Rails?

这是正常行为,并且还在灯塔中找到了#wontfix票证。

我的问题:有没有办法输出,我的rake任务运行时发生了什么?它执行一些爬行并运行数小时。我更喜欢输出是否在特定的日志文件中,如/log/crawler.log

现在我只是使用此命令写入日志文件:

ActiveRecord::Base.logger.info "Log Text"

谢谢!

3 个答案:

答案 0 :(得分:14)

您遇到的问题是rails会忽略生产模式中的“信息”级别日志。

我建议您阅读:http://www.ruby-doc.org/stdlib/libdoc/logger/rdoc/classes/Logger.html

并创建自己的记录器:

logger = Logger.new('logfile.log')
logger.info "Something happened"

答案 1 :(得分:2)

您可以使用Logger.new(“file.log”)创建一个新的记录器,然后调用它的方法。

  task :import_stuff => :environment do
    require 'csv'
    l = Logger.new("stuff.log")
    csv_file = "#{RAILS_ROOT}/stuff.csv"
    CSV.open(csv_file, 'r') do |row|
      l.info row[1]
     end
  end

答案 2 :(得分:2)

也许您需要在需要的地方写出缓冲区:

logger.flush

或者您可以启用自动刷新功能:

task :foo => :environment do
  Rails.logger.auto_flushing = 1
  Rails.logger.info "bar"
end