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