Skip to content

Commit ff27758

Browse files
committed
Revert "Merge pull request #44695 from Edouard-chin/ec-tagger-logger-broadcast"
This reverts commit 31925f5. This was causing tags to leak to the broadcast logger when `tagged` without a block is used. Fix #45854.
1 parent 4d25c64 commit ff27758

File tree

4 files changed

+13
-77
lines changed

4 files changed

+13
-77
lines changed

activesupport/lib/active_support/logger.rb

+5-4
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,6 @@ def self.logger_outputs_to?(logger, *sources)
2222
# Broadcasts logs to multiple loggers.
2323
def self.broadcast(logger) # :nodoc:
2424
Module.new do
25-
define_singleton_method(:extended) do |base|
26-
base.public_send(:broadcast_to, logger) if base.respond_to?(:broadcast_to)
27-
end
28-
2925
define_method(:add) do |*args, &block|
3026
logger.add(*args, &block)
3127
super(*args, &block)
@@ -46,6 +42,11 @@ def self.broadcast(logger) # :nodoc:
4642
super(name)
4743
end
4844

45+
define_method(:formatter=) do |formatter|
46+
logger.formatter = formatter
47+
super(formatter)
48+
end
49+
4950
define_method(:level=) do |level|
5051
logger.level = level
5152
super(level)

activesupport/lib/active_support/tagged_logging.rb

-15
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
# frozen_string_literal: true
22

33
require "active_support/core_ext/module/delegation"
4-
require "active_support/core_ext/module/redefine_method"
54
require "active_support/core_ext/object/blank"
65
require "logger"
76
require "active_support/logger"
@@ -95,20 +94,6 @@ def self.new(logger)
9594

9695
delegate :push_tags, :pop_tags, :clear_tags!, to: :formatter
9796

98-
def broadcast_to(other_logger) # :nodoc:
99-
define_singleton_method(:formatter=) do |formatter|
100-
other_logger.formatter ||= formatter
101-
102-
other_logger.formatter.singleton_class.redefine_method(:current_tags) do
103-
formatter.current_tags
104-
end
105-
106-
super(formatter)
107-
end
108-
109-
self.formatter = self.formatter.clone
110-
end
111-
11297
def tagged(*tags)
11398
if block_given?
11499
formatter.tagged(*tags) { yield self }

activesupport/test/broadcast_logger_test.rb

+8
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,14 @@ class BroadcastLoggerTest < TestCase
5555
assert_equal ::Logger::FATAL, log2.progname
5656
end
5757

58+
test "#formatter= assigns to all the loggers" do
59+
assert_nil logger.formatter
60+
logger.formatter = ::Logger::FATAL
61+
62+
assert_equal ::Logger::FATAL, log1.formatter
63+
assert_equal ::Logger::FATAL, log2.formatter
64+
end
65+
5866
test "#local_level= assigns the local_level to all loggers" do
5967
assert_equal ::Logger::DEBUG, logger.local_level
6068
logger.local_level = ::Logger::FATAL

activesupport/test/tagged_logging_test.rb

-58
Original file line numberDiff line numberDiff line change
@@ -226,62 +226,4 @@ class TaggedLoggingWithoutBlockTest < ActiveSupport::TestCase
226226
assert_equal "[OMG] Broadcasting...\n", @output.string
227227
assert_equal "[OMG] Broadcasting...\n", broadcast_output.string
228228
end
229-
230-
test "keeps broadcasting functionality when passed a block" do
231-
broadcast_output = StringIO.new
232-
broadcast_logger = ActiveSupport::TaggedLogging.new(Logger.new(broadcast_output))
233-
@logger.extend(ActiveSupport::Logger.broadcast(broadcast_logger))
234-
235-
@logger.tagged("OMG") { |logger| logger.info "Broadcasting..." }
236-
237-
assert_equal "[OMG] Broadcasting...\n", @output.string
238-
assert_equal "[OMG] Broadcasting...\n", broadcast_output.string
239-
end
240-
241-
test "broadcasting when passing a block works and keeps formatter untouched" do
242-
broadcast_output = StringIO.new
243-
broadcast_logger = ActiveSupport::TaggedLogging.new(Logger.new(broadcast_output))
244-
my_formatter = Class.new do
245-
def call(_, _, _, msg)
246-
ActiveSupport::JSON.encode(message: msg, tags: current_tags)
247-
end
248-
end
249-
broadcast_logger.formatter = my_formatter.new
250-
251-
@logger.extend(ActiveSupport::Logger.broadcast(broadcast_logger))
252-
@logger.tagged("OMG") { |logger| logger.info "Broadcasting..." }
253-
254-
assert_equal "[OMG] Broadcasting...\n", @output.string
255-
assert_equal "{\"message\":\"Broadcasting...\",\"tags\":[\"OMG\"]}", broadcast_output.string
256-
end
257-
258-
test "broadcasting without passing a block works and keeps formatter untouched" do
259-
broadcast_output = StringIO.new
260-
broadcast_logger = ActiveSupport::TaggedLogging.new(Logger.new(broadcast_output))
261-
my_formatter = Class.new do
262-
def call(_, _, _, msg)
263-
ActiveSupport::JSON.encode(message: msg, tags: current_tags)
264-
end
265-
end
266-
broadcast_logger.formatter = my_formatter.new
267-
268-
@logger.extend(ActiveSupport::Logger.broadcast(broadcast_logger))
269-
tagger_logger1 = @logger.tagged("OMG")
270-
tagger_logger2 = tagger_logger1.tagged("FOO")
271-
tagger_logger2.info("Broadcasting...")
272-
273-
assert_equal "[OMG] [FOO] Broadcasting...\n", @output.string
274-
assert_equal "{\"message\":\"Broadcasting...\",\"tags\":[\"OMG\",\"FOO\"]}", broadcast_output.string
275-
end
276-
277-
test "broadcasting on a non tagged logger" do
278-
broadcast_output = StringIO.new
279-
broadcast_logger = ActiveSupport::Logger.new(broadcast_output)
280-
281-
@logger.extend(ActiveSupport::Logger.broadcast(broadcast_logger))
282-
@logger.tagged("OMG") { |logger| logger.info "Broadcasting..." }
283-
284-
assert_equal "[OMG] Broadcasting...\n", @output.string
285-
assert_equal "Broadcasting...\n", broadcast_output.string
286-
end
287229
end

0 commit comments

Comments
 (0)