在我的rails应用程序中,我有一个后台进程运行器,型号名称为Worker,它检查每10秒运行一次的新任务。此检查每次生成两个SQL查询 - 一个用于查找新作业,一个用于删除旧已完成的作业。
此问题 - 主日志文件因每个查询而被垃圾邮件发送。
我可以将Worker模型生成的SQL查询指向一个单独的日志文件,或者至少使它们静音吗?覆盖Worker.logger不起作用 - 它只重定向显式调用logger.debug(“something”)的消息。
答案 0 :(得分:4)
答案 1 :(得分:0)
我在此处演示了如何在适配器级别记录查询。 How do I get the last SQL query performed by ActiveRecord in Ruby on Rails?
除非用一些非常可怕的黑客调整适配器行为,否则你无法改变行为。
答案 2 :(得分:0)
class Worker < ActiveRecord::Base
def run
old_level, self.class.logger.level = self.class.logger.level, Logger::WARN
run_outstanding_jobs
remove_obsolete_jobs
ensure
self.class.logger.level = old_level
end
end
这是一个相当熟悉的习语。在不同的情况下,我已经多次见过它了。当然,如果你不知道ActiveRecord :: Base.logger可以像这样改变,那就很难猜到了。
此解决方案的一个警告:这会更改所有ActiveRecord,ActionController,ActionView,ActionMailer和ActiveResource 的记录器级别。这是因为所有模块共享一个Logger实例。