Permalink
Browse files

Add ActiveSupport::Logger#silence that works the same as the old Logg…

…er#silence extension
  • Loading branch information...
1 parent e0176bf commit f914454f3af46a011d2ea627925cadea73f62e92 @dhh dhh committed Dec 21, 2012
@@ -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`,
@@ -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
@@ -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
@@ -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
@@ -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

2 comments on commit f914454

Owner

tenderlove replied Dec 21, 2012

Using silence isn't thread safe. Since the logger is shared among threads, it means other threads could be silenced accidentally.

If we really need to provide this, we can, but any extension that uses silence can't be used in a threaded application, or any application that uses silence can't be used in a threaded web server.

Member

steveklabnik replied Dec 21, 2012

@tenderlove should we mention this in some comments? The chances someone sees that here are pretty small.

Please sign in to comment.