Rails中的东西(ActiveRecord :: Base.logger?)将所有已执行的SQL放入log / development.log。
我有一个rails应用程序,其数据由几个rake任务填充。通常在开发中,我想运行Web应用程序,同时运行其中几个rake任务(它们是长时间运行的任务,与其他系统通信并在本地数据库中创建数据)。
令人讨厌的是,他们都同时登录到同一个文件。
我应该如何/在哪里更改?我可以从命令行执行此操作吗?我应该在哪里(如果在rake文件中)?或者我应该为每个rake任务创建新环境吗?
我应该阅读哪些文档来回答这个问题,它在哪里?
非常感谢。
答案 0 :(得分:3)
取决于您真正想要记录的内容。在Rails 3. +中,您可以使用ActiveSupport::LogSubscriber
机制挂钩到Rails内部,并将某些兴趣记录到其他文件中。
如果你真的想要为每个rake任务劫持核心Rails.logger
实例,那么就是这样。
# lib/tasks/foo.rake
desc "Prints Hello World"
task :helloworld do
Rails.logger = Logger.new("/path/to/hello-world.log")
# do something in your Rails stack that would write to "Rails.logger"
end
未经测试,但我认为这可行。
话虽如此,我认为通过ActiveSupport::LogSubscriber
订阅ActiveRecord中的有趣事件可能是一种更清洁的方法
答案 1 :(得分:1)
我目前的解决方案是
dec "update statistics"
task :update_stats => :environment do
root_path = Rails.configuration.root_path
env = Rails.configuration.environment
ActiveRecord::Base.logger = Logger.new(File.join(root_path, "log", "#{env}-stats.log"))
#code ...
end
感觉有点hacky,但也许只是这样做的方式。