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 482b48a
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 0 deletions.
16 changes: 16 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,22 @@ def target_version

# patch applies our patch
def patch
# ActiveSupport::TaggedLogging is the default Rails logger since Rails 5
if defined?(::ActiveSupport::TaggedLogging::Formatter) &&
::Lograge::LogSubscribers::ActionController
.logger&.formatter.is_a?(::ActiveSupport::TaggedLogging::Formatter)

Datadog.logger.error(
'Lograge and ActiveSupport::TaggedLogging (the default Rails log formatter) 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
21 changes: 21 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,31 @@

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 'without Rails tagged logging' do
it 'does not log incompatibility error' do
expect(Datadog.logger).to_not receive(:error)

described_class.patch
end
end

context 'with Rails tagged logging' do
it 'logs an incompatibility error' do
logger = ActiveSupport::TaggedLogging.new(Logger.new(File::NULL))
stub_const('Lograge::LogSubscribers::ActionController', double('controller', logger: logger))

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

described_class.patch
end
end
end
end

0 comments on commit 482b48a

Please sign in to comment.