如何将对rails控制器操作的调用静音

我已经弄清楚如何通过在actionger的方法中将所有内容包装在logger.silence块中来使行为的内容静音。

但是,我仍然可以调用日志文件中显示的操作。

IE:

Processing DashboardController#update (for 66.201.17.166 at 2009-09-09 19:03:27) [GET] Parameters: {"todos"=>{"user"=>"25", "sfu_type"=>""}} Completed in 1021ms (View: 439, DB: 438) | 200 OK [http://my.host.com/dashboard/update?todos%5Buser%5D=25&todos%5Bsfu_type%5D=] 

我想要保持上述内容不要一起写入日志,或者将其重定向到不同的日志文件(即dashboard.log),这样它就会停止使production.log文件混乱。

每次登录的每个用户的ajax调用更新时,我都会将上面的示例写入日志。这大约每2分钟更新一次,因此生产日志文件充斥着无用的日志消息。

迟到的答案,但我花了很多时间寻找答案的互联网,因此:

在包含您要忽略的操作的控制器中,覆盖logger方法并返回某些操作的rails默认值,以及需要特殊处理的自定义记录器或nil。

 def logger if params[:action] == 'action_to_ignore' # return custom logger or nil else RAILS_DEFAULT_LOGGER end end 

我怀疑有一种更简单的方法,如果它存在,我很乐意听到它。

logger调用遍布ActionController::Base 。 我能想到的唯一方法就是修补一堆方法并检查相关控制器的名称。

也许你需要做的就是覆盖这种方法 。 不确定。 祝好运 :)

这似乎是使用中间件的一个非常好的,灵活的解决方案: http : //dennisreimann.de/blog/silencing-the-rails-log-on-a-per-action-basis/

您是否设置了生产日志记录级别?

config> environments> production.rb

config.log_level =:warn(默认为:info)

在应用程序控制器中,您可以覆盖记录器:

 def log_error(exception) #super(exception) #do my logging here end 

当关键应用程序出现错误时,我用它给我发电子邮件。