我正在尝试在运行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"
谢谢!
答案 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