mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Broadcast #silence on logger. Rewrite tests.
This commit is contained in:
parent
f9a39e0d51
commit
99bd118eec
2 changed files with 121 additions and 31 deletions
|
@ -55,6 +55,24 @@ module ActiveSupport
|
||||||
logger.local_level = level if logger.respond_to?(:local_level=)
|
logger.local_level = level if logger.respond_to?(:local_level=)
|
||||||
super(level) if respond_to?(:local_level=)
|
super(level) if respond_to?(:local_level=)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
define_method(:silence) do |level = Logger::ERROR, &block|
|
||||||
|
if logger.respond_to?(:silence)
|
||||||
|
logger.silence(level) do
|
||||||
|
if respond_to?(:silence)
|
||||||
|
super(level, &block)
|
||||||
|
else
|
||||||
|
block.call(level)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if respond_to?(:silence)
|
||||||
|
super(level, &block)
|
||||||
|
else
|
||||||
|
block.call(level)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -3,75 +3,147 @@ require 'abstract_unit'
|
||||||
module ActiveSupport
|
module ActiveSupport
|
||||||
class BroadcastLoggerTest < TestCase
|
class BroadcastLoggerTest < TestCase
|
||||||
attr_reader :logger, :log1, :log2
|
attr_reader :logger, :log1, :log2
|
||||||
def setup
|
|
||||||
|
setup do
|
||||||
@log1 = FakeLogger.new
|
@log1 = FakeLogger.new
|
||||||
@log2 = FakeLogger.new
|
@log2 = FakeLogger.new
|
||||||
@log1.extend Logger.broadcast @log2
|
@log1.extend Logger.broadcast @log2
|
||||||
@logger = @log1
|
@logger = @log1
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_debug
|
Logger::Severity.constants.each do |level_name|
|
||||||
logger.debug "foo"
|
method = level_name.downcase
|
||||||
assert_equal 'foo', log1.adds.first[2]
|
level = Logger::Severity.const_get(level_name)
|
||||||
assert_equal 'foo', log2.adds.first[2]
|
|
||||||
|
test "##{method} adds the message to all loggers" do
|
||||||
|
logger.send(method, "msg")
|
||||||
|
|
||||||
|
assert_equal [level, "msg", nil], log1.adds.first
|
||||||
|
assert_equal [level, "msg", nil], log2.adds.first
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_close
|
test "#close broadcasts to all loggers" do
|
||||||
logger.close
|
logger.close
|
||||||
|
|
||||||
assert log1.closed, 'should be closed'
|
assert log1.closed, 'should be closed'
|
||||||
assert log2.closed, 'should be closed'
|
assert log2.closed, 'should be closed'
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_chevrons
|
test "#<< shovels the value into all loggers" do
|
||||||
logger << "foo"
|
logger << "foo"
|
||||||
|
|
||||||
assert_equal %w{ foo }, log1.chevrons
|
assert_equal %w{ foo }, log1.chevrons
|
||||||
assert_equal %w{ foo }, log2.chevrons
|
assert_equal %w{ foo }, log2.chevrons
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_level
|
test "#level= assigns the level to all loggers" do
|
||||||
assert_nil logger.level
|
assert_equal ::Logger::DEBUG, logger.level
|
||||||
logger.level = 10
|
logger.level = ::Logger::FATAL
|
||||||
assert_equal 10, log1.level
|
|
||||||
assert_equal 10, log2.level
|
assert_equal ::Logger::FATAL, log1.level
|
||||||
|
assert_equal ::Logger::FATAL, log2.level
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_progname
|
test "#progname= assigns to all the loggers" do
|
||||||
assert_nil logger.progname
|
assert_nil logger.progname
|
||||||
logger.progname = 10
|
logger.progname = ::Logger::FATAL
|
||||||
assert_equal 10, log1.progname
|
|
||||||
assert_equal 10, log2.progname
|
assert_equal ::Logger::FATAL, log1.progname
|
||||||
|
assert_equal ::Logger::FATAL, log2.progname
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_formatter
|
test "#formatter= assigns to all the loggers" do
|
||||||
assert_nil logger.formatter
|
assert_nil logger.formatter
|
||||||
logger.formatter = 10
|
logger.formatter = ::Logger::FATAL
|
||||||
assert_equal 10, log1.formatter
|
|
||||||
assert_equal 10, log2.formatter
|
assert_equal ::Logger::FATAL, log1.formatter
|
||||||
|
assert_equal ::Logger::FATAL, log2.formatter
|
||||||
|
end
|
||||||
|
|
||||||
|
test "#local_level= assigns the local_level to all loggers" do
|
||||||
|
assert_equal ::Logger::DEBUG, logger.local_level
|
||||||
|
logger.local_level = ::Logger::FATAL
|
||||||
|
|
||||||
|
assert_equal ::Logger::FATAL, log1.local_level
|
||||||
|
assert_equal ::Logger::FATAL, log2.local_level
|
||||||
|
end
|
||||||
|
|
||||||
|
test "#silence silences all loggers below the default level of ERROR" do
|
||||||
|
logger.silence do
|
||||||
|
logger.debug "test"
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_equal [], log1.adds
|
||||||
|
assert_equal [], log2.adds
|
||||||
|
end
|
||||||
|
|
||||||
|
test "#silence does not silence at or above ERROR" do
|
||||||
|
logger.silence do
|
||||||
|
logger.error "from error"
|
||||||
|
logger.unknown "from unknown"
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_equal [[::Logger::ERROR, "from error", nil], [::Logger::UNKNOWN, "from unknown", nil]], log1.adds
|
||||||
|
assert_equal [[::Logger::ERROR, "from error", nil], [::Logger::UNKNOWN, "from unknown", nil]], log2.adds
|
||||||
|
end
|
||||||
|
|
||||||
|
test "#silence allows you to override the silence level" do
|
||||||
|
logger.silence(::Logger::FATAL) do
|
||||||
|
logger.error "unseen"
|
||||||
|
logger.fatal "seen"
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_equal [[::Logger::FATAL, "seen", nil]], log1.adds
|
||||||
|
assert_equal [[::Logger::FATAL, "seen", nil]], log2.adds
|
||||||
end
|
end
|
||||||
|
|
||||||
class FakeLogger
|
class FakeLogger
|
||||||
|
include LoggerSilence
|
||||||
|
|
||||||
attr_reader :adds, :closed, :chevrons
|
attr_reader :adds, :closed, :chevrons
|
||||||
attr_accessor :level, :progname, :formatter
|
attr_accessor :level, :progname, :formatter, :local_level
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
@adds = []
|
@adds = []
|
||||||
@closed = false
|
@closed = false
|
||||||
@chevrons = []
|
@chevrons = []
|
||||||
@level = nil
|
@level = ::Logger::DEBUG
|
||||||
@progname = nil
|
@local_level = ::Logger::DEBUG
|
||||||
@formatter = nil
|
@progname = nil
|
||||||
|
@formatter = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
def debug msg, &block
|
def debug(message, &block)
|
||||||
add(:omg, nil, msg, &block)
|
add(::Logger::DEBUG, message, &block)
|
||||||
|
end
|
||||||
|
|
||||||
|
def info(message, &block)
|
||||||
|
add(::Logger::INFO, message, &block)
|
||||||
|
end
|
||||||
|
|
||||||
|
def warn(message, &block)
|
||||||
|
add(::Logger::WARN, message, &block)
|
||||||
|
end
|
||||||
|
|
||||||
|
def error(message, &block)
|
||||||
|
add(::Logger::ERROR, message, &block)
|
||||||
|
end
|
||||||
|
|
||||||
|
def fatal(message, &block)
|
||||||
|
add(::Logger::FATAL, message, &block)
|
||||||
|
end
|
||||||
|
|
||||||
|
def unknown(message, &block)
|
||||||
|
add(::Logger::UNKNOWN, message, &block)
|
||||||
end
|
end
|
||||||
|
|
||||||
def << x
|
def << x
|
||||||
@chevrons << x
|
@chevrons << x
|
||||||
end
|
end
|
||||||
|
|
||||||
def add(*args)
|
def add(message_level, message=nil, progname=nil, &block)
|
||||||
@adds << args
|
@adds << [message_level, message, progname] if message_level >= local_level
|
||||||
end
|
end
|
||||||
|
|
||||||
def close
|
def close
|
||||||
|
|
Loading…
Reference in a new issue