【问题标题】:How to prevent logging Rails stack trace如何防止记录 Rails 堆栈跟踪
【发布时间】:2016-03-08 22:31:14
【问题描述】:

我正在尝试减少日志中的噪音,并希望禁用 Rails 在错误期间记录堆栈跟踪。

由于我使用的是错误报告服务 (Honeybadger.io),因此我不需要在日志中查看堆栈跟踪,因为它已经在错误处理服务的异常报告中可用。

【问题讨论】:

    标签: ruby-on-rails logging


    【解决方案1】:

    默认的 Rails 中间件 DebugExceptions 就是 logs the errors

    您可以在config/environment.rbconfig/environments/production.rb 中使用config.middleware.delete(ActionDispatch::DebugExceptions) 将其删除

    【讨论】:

      【解决方案2】:

      根据文档,您应该能够添加一个回溯消音器,通过在块中返回 true 来排除每一行。

      但是,至少对于 Rails 4.2.5.2,这似乎不起作用,即使它确实起作用,您最终仍会在日志中看到有关异常的一行。

      我无意中发现,如果您在消音器块内引发错误,这将抑制错误消息和整个回溯,这正是我正在寻找的。​​p>

      Rails.backtrace_cleaner.add_silencer { |_line| raise }
      

      将这个 hack 与 concise_logging gem 结合起来,我现在可以拥有如下所示的日志:

      【讨论】:

      • Gerry,可能我的方法好一点,见我上面的回答
      • 消音器返回true 没有帮助的原因是,如果过滤后的跟踪为空,则记录错误的DebugExceptions 中间件将默认记录未过滤的跟踪。见github.com/rails/rails/blob/…
      【解决方案3】:

      好吧,Rails.backtrace_cleaner.add_silencer 有效,但我认为它的行为是可预测的

      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 =~ /lib/ }
      

      并在模型中创建简单的类,只需要方法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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-18
        • 2016-06-21
        • 2020-07-25
        • 2011-03-29
        • 2014-11-01
        • 1970-01-01
        • 2021-02-07
        • 2013-11-16
        相关资源
        最近更新 更多