Improve performance of the log subscriber by remembering the list of all loggers instead of trying to extract them each time

This commit is contained in:
wycats 2010-06-04 09:48:29 -07:00
parent 220603ee70
commit 5fa3a2d123

@ -52,6 +52,7 @@ class LogSubscriber
def self.add(namespace, log_subscriber, notifier = ActiveSupport::Notifications)
log_subscribers << log_subscriber
@flushable_loggers = nil
log_subscriber.public_methods(false).each do |event|
notifier.subscribe("#{event}.#{namespace}") do |*args|
@ -70,11 +71,17 @@ def self.log_subscribers
@log_subscribers ||= []
end
def self.flushable_loggers
@flushable_loggers ||= begin
loggers = log_subscribers.map(&:logger)
loggers.uniq!
loggers.select { |l| l.respond_to?(:flush) }
end
end
# Flush all log_subscribers' logger.
def self.flush_all!
loggers = log_subscribers.map(&:logger)
loggers.uniq!
loggers.each { |l| l.flush if l.respond_to?(:flush) }
flushable_loggers.each(&:flush)
end
# By default, we use the Rails.logger for logging.