Skip to content

Commit

Permalink
add a broadcasting logger so we can split logs
Browse files Browse the repository at this point in the history
  • Loading branch information
tenderlove committed Jan 20, 2012
1 parent 30b0e58 commit d42b3d4
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 0 deletions.
23 changes: 23 additions & 0 deletions activesupport/lib/active_support/logger.rb
@@ -1,6 +1,29 @@
require 'logger' require 'logger'


module ActiveSupport 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 class Logger < ::Logger
def initialize(*args) def initialize(*args)
super super
Expand Down
57 changes: 57 additions & 0 deletions activesupport/test/broadcast_logger_test.rb
@@ -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

0 comments on commit d42b3d4

Please sign in to comment.