1
0
Fork 0
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:
Aaron Patterson 2012-01-20 11:45:29 -08:00
parent 30b0e5848c
commit d42b3d4347
2 changed files with 80 additions and 0 deletions

View file

@ -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

View 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