在我的Rails应用程序中,我已经设置了以下回溯消音器,正如Michael Hartl在他的Rails教程中所建议的那样:
Rails.backtrace_cleaner.add_silencer { |line| line =~ /rvm/ }
但我仍然得到了我打算过滤的所有噪音:
7:13:55 - INFO - Running: test/controllers/tags_controller_test.rb
Started
ERROR["test_should_get_index", TagsControllerTest, 0.45206]
test_should_get_index#TagsControllerTest (0.45s)
ActionController::UrlGenerationError:
ActionController::UrlGenerationError: No route matches {:action=>"index", :controller=>"tags"}
/Users/chris/.rvm/gems/ruby-2.0.0-p353/gems/actionpack-4.1.6/lib/action_dispatch/journey/formatter.rb:39:in `generate'
/Users/chris/.rvm/gems/ruby-2.0.0-p353/gems/actionpack-4.1.6/lib/action_dispatch/routing/route_set.rb:599:in `generate'
显然,字符串“rvm”出现在最后两行中。但他们仍然出现了。将字符串更改为“.rvm”没有任何区别。
答案 0 :(得分:4)
由于application_trace
为空(这是因为错误不是来自用户代码而是路由错误),我们会回退到framework_trace
,它不会过滤它(它只过滤噪音)。< / p>
您可以通过创建自己的log_formatter来解决它。在development.rb
和/或test.rb
添加
config.log_formatter = SilentLogger.new
config.log_formatter.add_silencer { |line| line =~ /rvm/ }
在模型中创建只需要方法call
的简单类。在那里,您可以根据需要修改回溯。
class SilentLogger
def initialize
@silencers = []
end
def add_silencer(&block)
@silencers << block
end
def call(severity, timestamp, progname, msg)
backtrace = (String === msg) ? "#{msg}\n" : "#{msg.inspect}\n"
return backtrace if @silencers.empty?
@silencers.each do |s|
backtrace = backtrace.split("\n").delete_if { |line| s.call(line) }
end
backtrace.join("\n")
end
end
答案 1 :(得分:-2)
您的日志显示/.rvm/
您的设置/rvm/
- 这可能是原因吗?
试一试,不要忘记停止/重启服务器。