如何将对rails控制器动作的调用全部静音

时间:2009-09-10 02:13:52

标签: ruby-on-rails ruby logging

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

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

即:

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分钟更新一次,因此生产日志文件充斥着无用的日志消息。

5 个答案:

答案 0 :(得分:8)

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

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

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

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

答案 1 :(得分:1)

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

也许你需要做的就是覆盖this method。不确定。祝你好运:)

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

config>环境> production.rb

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

答案 4 :(得分:0)

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

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

当关键应用程序出现错误时,我会用此电子邮件向我发送电子邮件。