diff --git a/console-adapter-rails.gemspec b/console-adapter-rails.gemspec index 996923b..91d1598 100644 --- a/console-adapter-rails.gemspec +++ b/console-adapter-rails.gemspec @@ -24,7 +24,7 @@ Gem::Specification.new do |spec| spec.required_ruby_version = ">= 3.2" - spec.add_dependency "console", "~> 1.21" + spec.add_dependency "console", "~> 1.34" spec.add_dependency "fiber-storage", "~> 1.0" spec.add_dependency "rails", ">= 7.0" end diff --git a/lib/console/adapter/rails/logger.rb b/lib/console/adapter/rails/logger.rb index c775a4d..71bde76 100644 --- a/lib/console/adapter/rails/logger.rb +++ b/lib/console/adapter/rails/logger.rb @@ -82,8 +82,14 @@ def silenced?(severity) # @parameter progname [String | Nil] The program name. def add(severity, message = nil, progname = nil, &block) return if silenced?(severity) - - super(severity, message, progname, &block) + + options = formatter&.tag_stack&.tags.to_a.each_with_object({}) do |tag, memo| + next unless tag.respond_to?(:to_hash) + + memo.update(tag) + end + + super(severity, message, progname, **options, &block) end # Configure Rails to use the Console logger. diff --git a/test/console/adapter/rails/logger.rb b/test/console/adapter/rails/logger.rb index e1249e6..7e660f0 100644 --- a/test/console/adapter/rails/logger.rb +++ b/test/console/adapter/rails/logger.rb @@ -20,7 +20,29 @@ def before it "should support tags" do expect(Rails.logger).to be(:respond_to?, :tagged) end - + + it "should log tags that are Hashes" do + Rails.logger.tagged({ foo: "bar" }) do + Rails.logger.info("Hello World") + end + + expect(capture.last).to have_keys( + message: be == "Hello World", + foo: be == "bar" + ) + end + + it "should not fail when logging string tags" do + Rails.logger.tagged("foo=bar") do + Rails.logger.info("Hello World") + end + + expect(capture.last).to have_keys( + message: be == "Hello World" + ) + expect(capture.last.keys).to be == %i[time severity subject arguments message] + end + it "should support silence" do expect(Rails.logger).to be(:respond_to?, :silence)