From 2b5a955c18166301c1a51036ae01d5b07545c14a Mon Sep 17 00:00:00 2001 From: riking Date: Fri, 11 Jul 2014 15:03:07 -0700 Subject: [PATCH] Pass more context from Sidekiq jobs to Logster --- config/initializers/sidekiq.rb | 26 ++++++++++++++++++-------- lib/discourse.rb | 3 ++- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/config/initializers/sidekiq.rb b/config/initializers/sidekiq.rb index 82494716b87..86103246183 100644 --- a/config/initializers/sidekiq.rb +++ b/config/initializers/sidekiq.rb @@ -43,18 +43,28 @@ end Sidekiq.logger.level = Logger::WARN -class LogsterErrorHandler - def call(ex, hash={}) - text = "exception: #{ex}\ncontext: #{hash.inspect}\n" - if ex.backtrace - text << "backtrace: #{ex.backtrace.join("\n")}" +class SidekiqLogsterReporter + def call(ex, context = {}) + # Pass context to Logster + fake_env = {} + context.each do |key, value| + Logster.add_to_env(fake_env, key, value) end - Rails.logger.error(text) + + text = "Job exception: #{ex}\n" + if ex.backtrace + Logster.add_to_env(fake_env, :backtrace, ex.backtrace) + end + + Thread.current[Logster::Logger::LOGSTER_ENV] = fake_env + Logster.logger.error(text) rescue => e - Rails.logger.fatal("Failed to log exception #{ex} #{hash}\nReason: #{e}\n#{e.backtrace.join("\n")}") + Logster.logger.fatal("Failed to log exception #{ex} #{hash}\nReason: #{e.class} #{e}\n#{e.backtrace.join("\n")}") + ensure + Thread.current[Logster::Logger::LOGSTER_ENV] = nil end end -Sidekiq.error_handlers << LogsterErrorHandler.new +Sidekiq.error_handlers << SidekiqLogsterReporter.new diff --git a/lib/discourse.rb b/lib/discourse.rb index 22a79ee2c29..e8a8b772ee6 100644 --- a/lib/discourse.rb +++ b/lib/discourse.rb @@ -9,7 +9,8 @@ module Discourse extend Sidekiq::ExceptionHandler end - def self.handle_exception(ex, context=nil, parent_logger = nil) + # Responsible for exceptions in Sidekiq jobs - not requests! + def self.handle_exception(ex, context = nil, parent_logger = nil) context ||= {} parent_logger ||= SidekiqExceptionHandler