Skip to content

Commit 67e7f9e

Browse files
authored
Merge pull request rails#55465 from joshuay03/fix-55460
[Fix rails#55460] Make `ActiveSupport::Logger` `#freeze`-friendly
2 parents 8163e3e + fc18795 commit 67e7f9e

File tree

3 files changed

+41
-3
lines changed

3 files changed

+41
-3
lines changed

activesupport/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
* Make `ActiveSupport::Logger` `#freeze`-friendly.
2+
3+
*Joshua Young*
4+
15
* Make `ActiveSupport::Gzip.compress` deterministic based on input.
26

37
`ActiveSupport::Gzip.compress` used to include a timestamp in the output,

activesupport/lib/active_support/logger_thread_safe_level.rb

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ module ActiveSupport
77
module LoggerThreadSafeLevel # :nodoc:
88
extend ActiveSupport::Concern
99

10+
def initialize(...)
11+
super
12+
@local_level_key = :"logger_thread_safe_level_#{object_id}"
13+
end
14+
1015
def local_level
1116
IsolatedExecutionState[local_level_key]
1217
end
@@ -40,8 +45,6 @@ def log_at(level)
4045
end
4146

4247
private
43-
def local_level_key
44-
@local_level_key ||= :"logger_thread_safe_level_#{object_id}"
45-
end
48+
attr_reader :local_level_key
4649
end
4750
end

activesupport/test/logger_test.rb

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,37 @@ def test_logger_level_thread_safety
382382
ActiveSupport::IsolatedExecutionState.isolation_level = previous_isolation_level
383383
end
384384

385+
def test_logger_freeze
386+
logger = @logger.clone
387+
logger.freeze
388+
389+
assert_nothing_raised do
390+
assert_equal Logger::DEBUG, logger.level
391+
392+
logger.debug "I am frozen 1"
393+
assert_includes @output.string, "I am frozen 1"
394+
395+
logger.debug { "I am frozen 2" }
396+
assert_includes @output.string, "I am frozen 2"
397+
398+
logger.add Logger::INFO, "I am frozen 3"
399+
assert_includes @output.string, "I am frozen 3"
400+
401+
logger.silence do
402+
logger.debug "I am frozen 4"
403+
end
404+
assert_not_includes @output.string, "I am frozen 4"
405+
end
406+
407+
assert_raises FrozenError do
408+
logger.level = Logger::INFO
409+
end
410+
411+
assert_raises FrozenError do
412+
logger.formatter = Logger::Formatter.new
413+
end
414+
end
415+
385416
def test_temporarily_logging_at_a_noisier_level
386417
@logger.level = Logger::INFO
387418

0 commit comments

Comments
 (0)