2009-07-24 51 views
3

在我的rails应用程序中,我有一个后台进程运行器,模型名称为Worker,用于检查每10秒运行的新任务。此检查每次都会生成两个SQL查询 - 一个查找新的作业,一个删除旧的完成的查询。rails中特定于模型的SQL日志记录

与此问题 - 主日志文件获取垃圾邮件的每个查询。

我可以将Worker模型衍生的SQL查询引导到单独的日志文件中,或者至少将它们静默?覆盖Worker.logger不起作用 - 它只重定向显式调用logger.debug(“something”)的消息。

回答

4

最简单和最地道的解决方案

logger.silence do 
    do_something 
end 

Logger#silence

+0

终于实现了这一点。不是我所希望的,但它确实解决了这个问题。 – 2009-07-27 10:03:11

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实例。