Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何将Rails中的sql语句重定向到log/development.log之外的其他位置?_Ruby On Rails_Logging - Fatal编程技术网

Ruby on rails 如何将Rails中的sql语句重定向到log/development.log之外的其他位置?

Ruby on rails 如何将Rails中的sql语句重定向到log/development.log之外的其他位置?,ruby-on-rails,logging,Ruby On Rails,Logging,Rails中的某些东西(ActiveRecord::Base.logger?)将所有执行的SQL放入log/development.log 我有一个rails应用程序,它的数据由几个rake任务填充。通常在开发过程中,我希望运行web应用程序,并同时运行其中几个rake任务(它们是与其他系统通信并在本地数据库中创建数据的长时间运行的任务) 令人烦恼的是,它们都同时登录到同一个文件 我应该如何/在哪里更改此项?我可以从命令行执行吗?我应该在哪里做(如果在rake文件中)?还是应该为每个rake任务

Rails中的某些东西(ActiveRecord::Base.logger?)将所有执行的SQL放入log/development.log

我有一个rails应用程序,它的数据由几个rake任务填充。通常在开发过程中,我希望运行web应用程序,并同时运行其中几个rake任务(它们是与其他系统通信并在本地数据库中创建数据的长时间运行的任务)

令人烦恼的是,它们都同时登录到同一个文件

我应该如何/在哪里更改此项?我可以从命令行执行吗?我应该在哪里做(如果在rake文件中)?还是应该为每个rake任务创建新的环境

是否有我应该阅读的文档来回答这个问题,它在哪里


非常感谢。

取决于您真正想要记录的内容。在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中的有趣事件可能是一种更干净的方法

我目前的解决方案是

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

感觉有点不舒服,但也许这就是解决问题的方法。

谢谢。该项目位于Rails 2.3.11上。我已经发布了我自己当前的解决方案作为可能的答案。您可以看到,
ActiveRecord::Base.logger
是一个独立于
Rails.logger
的考虑因素。另外,如果我使用
Rails.logger=…
而不是
ActiveRecord::Base.logger=…
,我会得到
NoMethodError:undefined方法'logger='for Rails:Module