Sidekiq stacktrace在日志中

时间:2015-09-23 12:17:16

标签: ruby-on-rails sidekiq

我正在使用papertrails插件在heroku上运行sidekiq应用程序,并且我使用例外来失败作业。对于每个异常,完整的堆栈跟踪存储在papertrail日志中,这绝对不是我想要的。

我找不到如何关闭该功能的方法。你能给我一个暗示我能做些什么吗? 也许我应该以不同的方式处理失败的工作?

谢谢!

1 个答案:

答案 0 :(得分:1)

这里的modification of the standard error logger将回溯记录限制为应用程序独有的行:

class ExceptionHandlerLogger
  def call(ex, ctxHash)
    Sidekiq.logger.warn(Sidekiq.dump_json(ctxHash)) if !ctxHash.empty?
    Sidekiq.logger.warn "#{ex.class.name}: #{ex.message}"

    unless ex.backtrace.nil?
      Sidekiq.logger.warn filter_backtrace(ex.backtrace).join("\n")
    end
  end

  def filter_backtrace(backtrace)
    index = backtrace.index { |item| item.include?('/lib/sidekiq/processor.rb') }
    backtrace.first(index.to_i)
  end
end

if !Sidekiq.error_handlers.delete_if { |h| h.class == Sidekiq::ExceptionHandler::Logger }
  fail "default sidekiq logger class changed!"
end

Sidekiq.error_handlers << ExceptionHandlerLogger.new