From f914454f3af46a011d2ea627925cadea73f62e92 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 21 Dec 2012 19:15:36 +0100 Subject: [PATCH] Add ActiveSupport::Logger#silence that works the same as the old Logger#silence extension --- activesupport/CHANGELOG.md | 4 ++++ .../lib/active_support/core_ext/logger.rb | 23 +++--------------- activesupport/lib/active_support/logger.rb | 4 ++++ .../lib/active_support/logger_silence.rb | 24 +++++++++++++++++++ activesupport/test/logger_test.rb | 10 ++++++++ 5 files changed, 45 insertions(+), 20 deletions(-) create mode 100644 activesupport/lib/active_support/logger_silence.rb diff --git a/activesupport/CHANGELOG.md b/activesupport/CHANGELOG.md index 3913b6ee1c..1d11ae2afd 100644 --- a/activesupport/CHANGELOG.md +++ b/activesupport/CHANGELOG.md @@ -1,5 +1,9 @@ ## Rails 4.0.0 (unreleased) ## +* Add ActiveSupport::Logger#silence that works the same as the old Logger#silence extension. + + *DHH* + * Remove surrogate unicode character encoding from `ActiveSupport::JSON.encode` The encoding scheme was broken for unicode characters outside the basic multilingual plane; since json is assumed to be `UTF-8`, and we already force the encoding to `UTF-8`, diff --git a/activesupport/lib/active_support/core_ext/logger.rb b/activesupport/lib/active_support/core_ext/logger.rb index 58704bc852..36c8f241b2 100644 --- a/activesupport/lib/active_support/core_ext/logger.rb +++ b/activesupport/lib/active_support/core_ext/logger.rb @@ -1,5 +1,6 @@ require 'active_support/core_ext/class/attribute_accessors' require 'active_support/deprecation' +require 'active_support/logger_silence' ActiveSupport::Deprecation.warn 'this file is deprecated and will be removed' @@ -31,27 +32,9 @@ def around_#{level}(before_message, after_message) # def around_debug(before_me # # logger.datetime_format = "%Y-%m-%d" # -# Note: This logger is deprecated in favor of ActiveSupport::Logger +# Note: This logger is deprecated in favor of ActiveSupport::BufferedLogger class Logger - ## - # :singleton-method: - # Set to false to disable the silencer - cattr_accessor :silencer - self.silencer = true - - # Silences the logger for the duration of the block. - def silence(temporary_level = Logger::ERROR) - if silencer - begin - old_logger_level, self.level = level, temporary_level - yield self - ensure - self.level = old_logger_level - end - else - yield self - end - end + include LoggerSilence alias :old_datetime_format= :datetime_format= # Logging date-time format (string passed to +strftime+). Ignored if the formatter diff --git a/activesupport/lib/active_support/logger.rb b/activesupport/lib/active_support/logger.rb index 65202f99fc..4a55bbb350 100644 --- a/activesupport/lib/active_support/logger.rb +++ b/activesupport/lib/active_support/logger.rb @@ -1,7 +1,11 @@ +require 'active_support/core_ext/class/attribute_accessors' +require 'active_support/logger_silence' require 'logger' module ActiveSupport class Logger < ::Logger + include LoggerSilence + # Broadcasts logs to multiple loggers. def self.broadcast(logger) # :nodoc: Module.new do diff --git a/activesupport/lib/active_support/logger_silence.rb b/activesupport/lib/active_support/logger_silence.rb new file mode 100644 index 0000000000..a8efdef944 --- /dev/null +++ b/activesupport/lib/active_support/logger_silence.rb @@ -0,0 +1,24 @@ +require 'active_support/concern' + +module LoggerSilence + extend ActiveSupport::Concern + + included do + cattr_accessor :silencer + self.silencer = true + end + + # Silences the logger for the duration of the block. + def silence(temporary_level = Logger::ERROR) + if silencer + begin + old_logger_level, self.level = level, temporary_level + yield self + ensure + self.level = old_logger_level + end + else + yield self + end + end +end \ No newline at end of file diff --git a/activesupport/test/logger_test.rb b/activesupport/test/logger_test.rb index eedeca30a8..d2801849ca 100644 --- a/activesupport/test/logger_test.rb +++ b/activesupport/test/logger_test.rb @@ -120,4 +120,14 @@ def test_buffer_multibyte byte_string.force_encoding("ASCII-8BIT") assert byte_string.include?(BYTE_STRING) end + + def test_silencing_everything_but_errors + @logger.silence do + @logger.debug "NOT THERE" + @logger.error "THIS IS HERE" + end + + assert !@output.string.include?("NOT THERE") + assert @output.string.include?("THIS IS HERE") + end end -- GitLab