Skip to content

Commit fefd8f3

Browse files
authored
Merge pull request rails#49720 from andrewn617/broadcast-logger-deep-dup
Add `BroadcastLogger#deep_dup`
2 parents 7de3400 + c14b98c commit fefd8f3

File tree

3 files changed

+24
-0
lines changed

3 files changed

+24
-0
lines changed

activesupport/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
* Fix `BroadcastLogger#dup` so that it duplicates the logger's `broadcasts`.
2+
3+
*Andrew Novoselac*
4+
15
* Fix issue where `bootstrap.rb` overwrites the `level` of a `BroadcastLogger`'s `broadcasts`.
26

37
*Andrew Novoselac*

activesupport/lib/active_support/broadcast_logger.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,14 @@ def fatal!
218218
dispatch { |logger| logger.fatal! }
219219
end
220220

221+
def initialize_copy(other)
222+
@broadcasts = []
223+
@progname = other.progname.dup
224+
@formatter = other.formatter.dup
225+
226+
broadcast_to(*other.broadcasts.map(&:dup))
227+
end
228+
221229
private
222230
def dispatch(&block)
223231
@broadcasts.each { |logger| block.call(logger) }

activesupport/test/broadcast_logger_test.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,18 @@ def info(msg, &block)
290290
assert(logger.qux(param: "foo"))
291291
end
292292

293+
test "#dup duplicates the broadcasts" do
294+
logger = CustomLogger.new
295+
logger.level = ::Logger::WARN
296+
broadcast_logger = BroadcastLogger.new(logger)
297+
298+
duplicate = broadcast_logger.dup
299+
300+
assert_equal ::Logger::WARN, duplicate.broadcasts.sole.level
301+
assert_not_same logger, duplicate.broadcasts.sole
302+
assert_same logger, broadcast_logger.broadcasts.sole
303+
end
304+
293305
class CustomLogger
294306
attr_reader :adds, :closed, :chevrons
295307
attr_accessor :level, :progname, :formatter, :local_level

0 commit comments

Comments
 (0)