我已经想出如何通过在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分钟更新一次,因此生产日志文件充斥着无用的日志消息。
答案 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
当关键应用程序出现错误时,我会用此电子邮件向我发送电子邮件。