Skip to content

Commit c37e357

Browse files
committed
Fix Sidekiq cross version issues
1 parent 9cce078 commit c37e357

File tree

6 files changed

+42
-39
lines changed

6 files changed

+42
-39
lines changed

lib/rails_semantic_logger/engine.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ class Engine < ::Rails::Engine
128128
config.error_handlers << RailsSemanticLogger::Sidekiq::Defaults::ERROR_HANDLER if existing
129129
end
130130

131-
if defined?(::Sidekiq::Job)
131+
if defined?(::Sidekiq::Job) && (::Sidekiq::VERSION.to_i != 5)
132132
::Sidekiq::Job.singleton_class.prepend(RailsSemanticLogger::Sidekiq::Loggable)
133133
else
134134
::Sidekiq::Worker.singleton_class.prepend(RailsSemanticLogger::Sidekiq::Loggable)

lib/rails_semantic_logger/extensions/sidekiq/sidekiq.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ def log_context(job_hash)
4141
module Middleware
4242
module Server
4343
class Logging
44+
# rubocop:disable Style/ExplicitBlockArgument
4445
def call(worker, item, queue)
4546
SemanticLogger.tagged(queue: queue) do
4647
worker.logger.info(

lib/rails_semantic_logger/sidekiq/defaults.rb

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,27 @@ module RailsSemanticLogger
22
module Sidekiq
33
module Defaults
44
# Prevent exception logging during standard error handling since the Job Logger below already logs the exception.
5-
if ::Sidekiq::VERSION.to_f < 7.1 ||
6-
(::Sidekiq::VERSION.to_f == 7.1 && ::Sidekiq::VERSION.split(".").last.to_i < 6)
7-
ERROR_HANDLER = ->(ex, ctx) do
8-
unless ctx.empty?
9-
job_hash = ctx[:job] || {}
10-
klass = job_hash["display_class"] || job_hash["wrapped"] || job_hash["class"]
11-
logger = klass ? SemanticLogger[klass] : Sidekiq.logger
12-
ctx[:context] ? logger.warn(ctx[:context], ctx) : logger.warn(ctx)
5+
ERROR_HANDLER =
6+
if ::Sidekiq::VERSION.to_f < 7.1 ||
7+
(::Sidekiq::VERSION.to_f == 7.1 && ::Sidekiq::VERSION.split(".").last.to_i < 6)
8+
lambda do |_ex, ctx|
9+
unless ctx.empty?
10+
job_hash = ctx[:job] || {}
11+
klass = job_hash["display_class"] || job_hash["wrapped"] || job_hash["class"]
12+
logger = klass ? SemanticLogger[klass] : Sidekiq.logger
13+
ctx[:context] ? logger.warn(ctx[:context], ctx) : logger.warn(ctx)
14+
end
1315
end
14-
end
15-
else
16-
ERROR_HANDLER = ->(ex, ctx, _default_configuration) do
17-
unless ctx.empty?
18-
job_hash = ctx[:job] || {}
19-
klass = job_hash["display_class"] || job_hash["wrapped"] || job_hash["class"]
20-
logger = klass ? SemanticLogger[klass] : Sidekiq.logger
21-
ctx[:context] ? logger.warn(ctx[:context], ctx) : logger.warn(ctx)
16+
else
17+
lambda do |_ex, ctx, _default_configuration|
18+
unless ctx.empty?
19+
job_hash = ctx[:job] || {}
20+
klass = job_hash["display_class"] || job_hash["wrapped"] || job_hash["class"]
21+
logger = klass ? SemanticLogger[klass] : Sidekiq.logger
22+
ctx[:context] ? logger.warn(ctx[:context], ctx) : logger.warn(ctx)
23+
end
2224
end
2325
end
24-
end
2526

2627
# Returns the default logger after removing from the supplied list.
2728
# Returns [nil] when the default logger was not present.
@@ -30,8 +31,9 @@ def self.delete_default_error_handler(error_handlers)
3031
return error_handlers.delete(::Sidekiq::DEFAULT_ERROR_HANDLER) if defined?(::Sidekiq::DEFAULT_ERROR_HANDLER)
3132

3233
return unless defined?(::Sidekiq::ExceptionHandler)
34+
3335
existing = error_handlers.find { |handler| handler.is_a?(::Sidekiq::ExceptionHandler::Logger) }
34-
return error_handlers.delete(existing) if existing
36+
error_handlers.delete(existing) if existing
3537
end
3638
end
3739
end

lib/rails_semantic_logger/sidekiq/loggable.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ module RailsSemanticLogger
22
module Sidekiq
33
module Loggable
44
def included(base)
5-
base.include(SemanticLogger::Loggable)
65
super
6+
base.include(SemanticLogger::Loggable)
77
end
88
end
99
end
Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
# In tests we force Sidekiq into thinking it is running as a server,
22
# so it creates a stdout logger. Remove it here:
33
Rails.application.config.after_initialize do
4-
if Rails.env.test?
5-
SemanticLogger.appenders.delete_if { |appender| appender.is_a?(SemanticLogger::Appender::IO) }
6-
end
4+
SemanticLogger.appenders.delete_if { |appender| appender.is_a?(SemanticLogger::Appender::IO) } if Rails.env.test?
75
end

test/sidekiq_test.rb

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ class SidekiqTest < Minitest::Test
88

99
describe "#logger" do
1010
it "has its own logger with the same name as the job" do
11+
assert_kind_of SemanticLogger::Logger, SimpleJob.logger
1112
assert_kind_of SemanticLogger::Logger, job.logger
1213
assert_equal job.logger.name, job.name
1314
refute_same Sidekiq.logger, job.logger
@@ -21,22 +22,23 @@ class SidekiqTest < Minitest::Test
2122
if Sidekiq::VERSION.to_i == 6 && Sidekiq::VERSION.to_f < 6.5
2223
let(:processor) do
2324
mgr = Minitest::Mock.new
24-
opts = {queues: ["default"]}
25+
opts = Sidekiq.options
2526
opts[:fetch] = Sidekiq::BasicFetch.new(opts)
2627
Sidekiq::Processor.new(mgr, opts)
2728
end
2829
elsif Sidekiq::VERSION.to_i == 6
2930
let(:processor) do
30-
config = Sidekiq
31+
config = Sidekiq
3132
config[:fetch] = Sidekiq::BasicFetch.new(config)
3233
Sidekiq::Processor.new(config) { |*args| }
3334
end
3435
elsif Sidekiq::VERSION.to_i < 7
3536
let(:processor) do
36-
mgr = Minitest::Mock.new
37-
mgr.expect(:options, {queues: ["default"]})
38-
mgr.expect(:options, {queues: ["default"]})
39-
mgr.expect(:options, {queues: ["default"]})
37+
opts = Sidekiq.options
38+
mgr = Minitest::Mock.new
39+
mgr.expect(:options, opts)
40+
mgr.expect(:options, opts)
41+
mgr.expect(:options, opts)
4042
Sidekiq::Processor.new(mgr)
4143
end
4244
else
@@ -53,21 +55,21 @@ class SidekiqTest < Minitest::Test
5355

5456
assert_semantic_logger_event(
5557
messages[0],
56-
level: :info,
57-
name: "SimpleJob",
58-
message_includes: "Start #perform",
59-
metric: "sidekiq.queue.latency",
60-
named_tags: {jid: nil, queue: "default"}
58+
level: :info,
59+
name: "SimpleJob",
60+
message: "Start #perform",
61+
metric: "sidekiq.queue.latency",
62+
named_tags: {jid: nil, queue: "default"}
6163
)
6264
assert messages[0].metric_amount.is_a?(Float)
6365

6466
assert_semantic_logger_event(
6567
messages[1],
66-
level: :info,
67-
name: "SimpleJob",
68-
message_includes: "Completed #perform",
69-
metric: "sidekiq.job.perform",
70-
named_tags: {jid: nil, queue: "default"}
68+
level: :info,
69+
name: "SimpleJob",
70+
message: "Completed #perform",
71+
metric: "sidekiq.job.perform",
72+
named_tags: {jid: nil, queue: "default"}
7173
)
7274
assert messages[1].duration.is_a?(Float)
7375
end

0 commit comments

Comments
 (0)