gpt4 book ai didi

ruby-on-rails - 回溯消音器不工作

转载 作者:行者123 更新时间:2023-12-03 23:58:11 24 4
gpt4 key购买 nike

在我的 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”没有任何区别。

最佳答案

这是因为 https://github.com/vipulnsward/rails/blob/ecc8f283cfc1b002b5141c527a827e74b770f2f0/actionpack/lib/action_dispatch/middleware/debug_exceptions.rb#L155-L156

application_trace为空(这是因为错误不是来自用户代码而是路由错误),我们将回退到 framework_trace ,它不过滤它(它只过滤噪音)。

您可以通过创建自己的 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

关于ruby-on-rails - 回溯消音器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28836767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com