mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
add a broadcasting logger so we can split logs
This commit is contained in:
parent
30b0e5848c
commit
d42b3d4347
2 changed files with 80 additions and 0 deletions
|
@ -1,6 +1,29 @@
|
|||
require 'logger'
|
||||
|
||||
module ActiveSupport
|
||||
# Broadcasts logs to multiple loggers
|
||||
class BroadcastLogger < ::Logger # :nodoc:
|
||||
attr_reader :logs
|
||||
|
||||
def initialize(logs)
|
||||
super(nil)
|
||||
@logs = logs
|
||||
end
|
||||
|
||||
def add(severity, message = nil, progname = nil, &block)
|
||||
super
|
||||
logs.each { |l| l.add(severity, message, progname, &block) }
|
||||
end
|
||||
|
||||
def <<(x)
|
||||
logs.each { |l| l << x }
|
||||
end
|
||||
|
||||
def close
|
||||
logs.each(&:close)
|
||||
end
|
||||
end
|
||||
|
||||
class Logger < ::Logger
|
||||
def initialize(*args)
|
||||
super
|
||||
|
|
57
activesupport/test/broadcast_logger_test.rb
Normal file
57
activesupport/test/broadcast_logger_test.rb
Normal file
|
@ -0,0 +1,57 @@
|
|||
require 'abstract_unit'
|
||||
|
||||
module ActiveSupport
|
||||
class BroadcastLoggerTest < TestCase
|
||||
def test_debug
|
||||
log1 = FakeLogger.new
|
||||
log2 = FakeLogger.new
|
||||
|
||||
logger = BroadcastLogger.new [log1, log2]
|
||||
logger.debug "foo"
|
||||
assert_equal 'foo', log1.adds.first[2]
|
||||
assert_equal 'foo', log2.adds.first[2]
|
||||
end
|
||||
|
||||
def test_close
|
||||
log1 = FakeLogger.new
|
||||
log2 = FakeLogger.new
|
||||
|
||||
logger = BroadcastLogger.new [log1, log2]
|
||||
logger.close
|
||||
assert log1.closed, 'should be closed'
|
||||
assert log2.closed, 'should be closed'
|
||||
end
|
||||
|
||||
def test_chevrons
|
||||
log1 = FakeLogger.new
|
||||
log2 = FakeLogger.new
|
||||
|
||||
logger = BroadcastLogger.new [log1, log2]
|
||||
logger << "foo"
|
||||
assert_equal %w{ foo }, log1.chevrons
|
||||
assert_equal %w{ foo }, log2.chevrons
|
||||
end
|
||||
|
||||
class FakeLogger
|
||||
attr_reader :adds, :closed, :chevrons
|
||||
|
||||
def initialize
|
||||
@adds = []
|
||||
@closed = false
|
||||
@chevrons = []
|
||||
end
|
||||
|
||||
def << x
|
||||
@chevrons << x
|
||||
end
|
||||
|
||||
def add(*args)
|
||||
@adds << args
|
||||
end
|
||||
|
||||
def close
|
||||
@closed = true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue