Skip to content

Commit

Permalink
Emit log message for incompatible Lograge setup
Browse files Browse the repository at this point in the history
  • Loading branch information
marcotc committed Aug 12, 2024
1 parent 6b50227 commit d7e71dc
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 0 deletions.
13 changes: 13 additions & 0 deletions lib/datadog/tracing/contrib/lograge/patcher.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,19 @@ def target_version

# patch applies our patch
def patch
# ActiveSupport::TaggedLogging is the default Rails logger since Rails 5
if defined?(::Rails::VERSION::MAJOR) && ::Rails::VERSION::MAJOR >= 5
Datadog.logger.error(
'Lograge and ActiveSupport::TaggedLogging (the default Rails logger) are not compatible: ' \
'Lograge does not account for Rails log tags, creating polluted logs and breaking log formatting. ' \
'Traces and Logs correlation may not work. ' \
'Either: 1. Disable tagged logging in your Rails configuration ' \
'`config.logger = ActiveSupport::Logger.new(STDOUT); ' \
'config.active_job.logger = ActiveSupport::Logger.new(STDOUT)` ' \
'or 2. Use the `semantic_logger` gem instead of `lograge`.'
)
end

::Lograge::LogSubscribers::Base.include(Instrumentation)
end
end
Expand Down
22 changes: 22 additions & 0 deletions spec/datadog/tracing/contrib/lograge/patcher_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,32 @@

RSpec.describe Datadog::Tracing::Contrib::Lograge::Patcher do
describe '.patch' do
before { described_class.instance_variable_get(:@patch_only_once)&.send(:reset_ran_once_state_for_tests) }

it 'adds Instrumentation to ancestors of LogSubscribers::Base class' do
described_class.patch

expect(Lograge::LogSubscribers::Base.ancestors).to include(Datadog::Tracing::Contrib::Lograge::Instrumentation)
end

context 'with older Rails' do
it 'does not log incompatibility error' do
stub_const('Rails::VERSION::MAJOR', 4)

expect(Datadog.logger).to_not receive(:error)

described_class.patch
end
end

context 'with Rails with tagged logging' do
it 'logs an incompatibility error' do
stub_const('Rails::VERSION::MAJOR', 5)

expect(Datadog.logger).to receive(:error).with(/ActiveSupport::TaggedLogging/)

described_class.patch
end
end
end
end

0 comments on commit d7e71dc

Please sign in to comment.