我正在尝试降低日志中的噪音,并希望禁用Rails在错误期间记录堆栈跟踪。
由于我正在使用错误报告服务(Honeybadger.io),因此不需要在日志中看到堆栈跟踪,因为它已经在错误处理服务的异常报告中可用。
我正在尝试降低日志中的噪音,并希望禁用Rails在错误期间记录堆栈跟踪。
由于我正在使用错误报告服务(Honeybadger.io),因此不需要在日志中看到堆栈跟踪,因为它已经在错误处理服务的异常报告中可用。
DebugExceptions
是用来记录错误日志的。config/environment.rb
或config/environments/production.rb
中使用config.middleware.delete(ActionDispatch::DebugExceptions)
来删除它。Rails.backtrace_cleaner.add_silencer { |_line| raise }
嗯,Rails.backtrace_cleaner.add_silencer
是有效的,但我不认为它的行为是可预测的。
由于application_trace
为空(这是因为错误不是来自用户代码而是路由错误),我们正在回退到framework_trace
,它不会过滤它(仅过滤噪音)。
您可以通过创建自己的日志格式化程序来解决此问题。在您的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