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

问题描述 投票:6回答:3

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

我在这里读到

如何在Ruby on Rails中为自己的rake任务使用自定义日志?

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

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

现在我只是用这个命令写入日志文件:

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

谢谢!

ruby-on-rails logging rake web-crawler
3个回答
14
投票

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

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

并创建自己的记录器:

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

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
投票

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

logger.flush

或者你可以打开自动刷新:

task :foo => :environment do
  Rails.logger.auto_flushing = 1
  Rails.logger.info "bar"
end
© www.soinside.com 2019 - 2024. All rights reserved.