Skip to content

Commit f243e7f

Browse files
authored
Merge pull request rails#26874 from tgxworld/fix_broadcast_logger
`Broadcast#silence` breaks custom loggers that do not include `Logg…
2 parents 96a2c96 + 308e84e commit f243e7f

File tree

2 files changed

+21
-5
lines changed

2 files changed

+21
-5
lines changed

activesupport/lib/active_support/logger.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,14 @@ def self.broadcast(logger) # :nodoc:
5959
define_method(:silence) do |level = Logger::ERROR, &block|
6060
if logger.respond_to?(:silence)
6161
logger.silence(level) do
62-
if respond_to?(:silence)
62+
if defined?(super)
6363
super(level, &block)
6464
else
6565
block.call(self)
6666
end
6767
end
6868
else
69-
if respond_to?(:silence)
69+
if defined?(super)
7070
super(level, &block)
7171
else
7272
block.call(self)

activesupport/test/broadcast_logger_test.rb

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,20 @@ class BroadcastLoggerTest < TestCase
6969
assert_equal ::Logger::FATAL, log2.local_level
7070
end
7171

72+
test "#silence does not break custom loggers" do
73+
new_logger = FakeLogger.new
74+
custom_logger = CustomLogger.new
75+
custom_logger.extend(Logger.broadcast(new_logger))
76+
77+
custom_logger.silence do
78+
custom_logger.error "from error"
79+
custom_logger.unknown "from unknown"
80+
end
81+
82+
assert_equal [[::Logger::ERROR, "from error", nil], [::Logger::UNKNOWN, "from unknown", nil]], custom_logger.adds
83+
assert_equal [[::Logger::ERROR, "from error", nil], [::Logger::UNKNOWN, "from unknown", nil]], new_logger.adds
84+
end
85+
7286
test "#silence silences all loggers below the default level of ERROR" do
7387
logger.silence do
7488
logger.debug "test"
@@ -98,9 +112,7 @@ class BroadcastLoggerTest < TestCase
98112
assert_equal [[::Logger::FATAL, "seen", nil]], log2.adds
99113
end
100114

101-
class FakeLogger
102-
include LoggerSilence
103-
115+
class CustomLogger
104116
attr_reader :adds, :closed, :chevrons
105117
attr_accessor :level, :progname, :formatter, :local_level
106118

@@ -150,5 +162,9 @@ def close
150162
@closed = true
151163
end
152164
end
165+
166+
class FakeLogger < CustomLogger
167+
include LoggerSilence
168+
end
153169
end
154170
end

0 commit comments

Comments
 (0)