lib/instana/frameworks/rails.rb in instana-1.214.0 vs lib/instana/frameworks/rails.rb in instana-1.214.1
- old
+ new
@@ -16,9 +16,31 @@
initializer 'instana.rack' do |app|
# Configure the Instrumented Logger
if ::Instana.config[:logging][:enabled] && !ENV.key?('INSTANA_TEST')
logger = ::Instana::InstrumentedLogger.new('/dev/null')
if ::Rails::VERSION::STRING < "7.1"
+ # Rails 7.0.3 `tagged_logging.rb` has a number of bugs.
+ # What pertains to our instrumentation here is that in
+ # https://github.com/rails/rails/blob/v7.0.3/activesupport/lib/active_support/tagged_logging.rb#L100
+ # sets the `other_logger.formatter` to `formatter` if `other_logger.formatter` is `nil`
+ # but then
+ # https://github.com/rails/rails/blob/v7.0.3/activesupport/lib/active_support/tagged_logging.rb#L102
+ # redefines `formatter.current_tags` method to a proc calling `formatter.current_tags`, itself.
+ # which is an infinite recursion.
+ #
+ # This bug starts with 7.0.3:
+ # https://github.com/rails/rails/compare/v7.0.2...v7.0.3#diff-68f90ba4998610be2f7da027e006e8ddeeb06dece66f41579c94070e12f23011
+ # And is already reverted/fixed in 7.0.4
+ # https://github.com/rails/rails/compare/v7.0.3...v7.0.4#diff-68f90ba4998610be2f7da027e006e8ddeeb06dece66f41579c94070e12f23011
+ # The commit which fixes it is:
+ # https://github.com/rails/rails/commit/ff277583e22ddfbcfbd2131789a7cb7c2f868d68
+ #
+ # Since instana does trigger this bug here we workaround it, by defining the `formatter`,
+ # to break the infinite loop. The `formatter` used here is the same as the default used in
+ # https://github.com/rails/rails/blob/v7.0.3/activesupport/lib/active_support/tagged_logging.rb#L89C9-L89C70
+ if ::Rails::VERSION::STRING == "7.0.3"
+ logger.formatter = ActiveSupport::Logger::SimpleFormatter.new
+ end
Rails.logger.extend(ActiveSupport::Logger.broadcast(logger))
else
Rails.logger.broadcast_to(logger)
end
end