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 83c0965
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 0 deletions.
7 changes: 7 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -93,3 +93,10 @@ end
#
# TODO: Remove this once the issue is resolved: https://github.com/ffi/ffi/issues/1107
gem 'ffi', '~> 1.16.3', require: false

gem 'rails', '~> 6.1.0'
gem 'pg', '>= 1.1', platform: :ruby
gem 'sprockets', '< 4'
gem 'lograge', '~> 0.11'
gem 'net-smtp'
gem 'grpc'
14 changes: 14 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,20 @@ 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 83c0965

Please sign in to comment.