lib/sidekiq/logging/shared.rb in sidekiq-logstash-3.1.0 vs lib/sidekiq/logging/shared.rb in sidekiq-logstash-3.2.0

- old
+ new

@@ -1,7 +1,9 @@ # frozen_string_literal: true +require 'sidekiq/exception_utils' + module Sidekiq module Logging # Shared module with all the logics used by job loggers. module Shared ENCRYPTED = '[ENCRYPTED]' @@ -48,13 +50,27 @@ payload['duration'] = elapsed(started_at) payload['message'] += ": fail: #{payload['duration']} sec" payload['job_status'] = 'fail' - exc = exc.cause || exc if exc.is_a? Sidekiq::JobRetry::Handled - payload['error_message'] = exc.message - payload['error'] = exc.class - payload['error_backtrace'] = %('#{exc.backtrace.join("\n")}') + config = Sidekiq::Logstash.configuration + if config.log_job_exception_with_causes + payload['error'] = ExceptionUtils.get_exception_with_cause_hash( + exc, max_depth_left: config.causes_logging_max_depth + ) + else + exc = exc.cause || exc if exc.is_a? Sidekiq::JobRetry::Handled + payload['error_message'] = exc.message + payload['error'] = exc.class.to_s + payload['error_backtrace'] = %('#{exc.backtrace.join("\n")}') + if (cause = exc.cause) + payload['error_cause'] = { + 'class' => cause.class.to_s, + 'message' => cause.message, + 'backtrace' => ExceptionUtils.backtrace_for(cause, exc.backtrace) + } + end + end process_payload(payload) end private