aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/logger_silence.rb
diff options
context:
space:
mode:
authorPiotr Jakubowski <piotrj@gmail.com>2016-02-11 21:00:51 +0100
committerPiotr Jakubowski <piotrj@gmail.com>2016-02-11 21:00:51 +0100
commit2518bda97cbbcb33dc9a92e70d5b01c09e64d12d (patch)
treeba6404706f942b8896614d0172854c5cb348fc90 /activesupport/lib/active_support/logger_silence.rb
parent8a84f1c047ebb59dec7a7ece9355da9c7b0ae6b7 (diff)
downloadrails-2518bda97cbbcb33dc9a92e70d5b01c09e64d12d.tar.gz
rails-2518bda97cbbcb33dc9a92e70d5b01c09e64d12d.tar.bz2
rails-2518bda97cbbcb33dc9a92e70d5b01c09e64d12d.zip
Fix logger silencing for broadcasted loggers
Fix #23609 Commit 629efb6 introduced thread safety to logger silencing but it didn't take into account the fact that the logger can be extended with broadcasting to other logger. This commit introduces local_level to broadcasting Module which enables broadcasted loggers to be properly silenced.
Diffstat (limited to 'activesupport/lib/active_support/logger_silence.rb')
-rw-r--r--activesupport/lib/active_support/logger_silence.rb25
1 files changed, 4 insertions, 21 deletions
diff --git a/activesupport/lib/active_support/logger_silence.rb b/activesupport/lib/active_support/logger_silence.rb
index 125d81d973..3eb8098c77 100644
--- a/activesupport/lib/active_support/logger_silence.rb
+++ b/activesupport/lib/active_support/logger_silence.rb
@@ -7,39 +7,22 @@ module LoggerSilence
included do
cattr_accessor :silencer
- attr_reader :local_levels
self.silencer = true
end
- def after_initialize
- @local_levels = Concurrent::Map.new(:initial_capacity => 2)
- end
-
- def local_log_id
- Thread.current.__id__
- end
-
- def level
- local_levels[local_log_id] || super
- end
-
# Silences the logger for the duration of the block.
def silence(temporary_level = Logger::ERROR)
if silencer
begin
- old_local_level = local_levels[local_log_id]
- local_levels[local_log_id] = temporary_level
+ old_local_level = local_level
+ self.local_level = temporary_level
yield self
ensure
- if old_local_level
- local_levels[local_log_id] = old_local_level
- else
- local_levels.delete(local_log_id)
- end
+ self.local_level = old_local_level
end
else
yield self
end
end
-end \ No newline at end of file
+end