Sha256: 184b0265507afa0be06c9c044fd49558e116dca83509a3949d7a83bb08565e8a

Contents?: true

Size: 1.84 KB

Versions: 4

Compression:

Stored size: 1.84 KB

Contents

# :nodoc:
# Version:: $Id: repository.rb,v 1.1.1.1 2004/03/19 03:31:07 fando Exp $

require "singleton"

module Log4r
class Logger

  # The repository stores a Hash of loggers keyed to their fullnames and
  # provides a few functions to reduce the code bloat in log4r/logger.rb.
  # This class is supposed to be transparent to end users, hence it is
  # a class within Logger. If anyone knows how to make this private,
  # let me know.
  
  class Repository # :nodoc:
    include Singleton
    attr_reader :loggers
    
    def initialize
      @loggers = Hash.new
    end

    def self.[](fullname)
      instance.loggers[fullname]
    end

    def self.[]=(fullname, logger)
      instance.loggers[fullname] = logger
    end
  
    # Retrieves all children of a parent
    def self.all_children(parent)
      # children have the parent name + delimiter in their fullname
      daddy = parent.name + Private::Config::LoggerPathDelimiter
      for fullname, logger in instance.loggers
        yield logger if parent.is_root? || fullname =~ /#{daddy}/
      end
    end

    # when new loggers are introduced, they may get inserted into
    # an existing inheritance tree. this method
    # updates the children of a logger to link their new parent
    def self.reassign_any_children(parent)
      for fullname, logger in instance.loggers
        next if logger.is_root?
        logger.parent = parent if logger.path =~ /^#{parent.fullname}$/
      end
    end
    
    # looks for the first defined logger in a child's path 
    # or nil if none found (which will then be rootlogger)
    def self.find_ancestor(path)
      arr = path.split Log4rConfig::LoggerPathDelimiter
      logger = nil
      while arr.size > 0 do
        logger = Repository[arr.join(Log4rConfig::LoggerPathDelimiter)]
        break unless logger.nil?
        arr.pop
      end
      logger
    end

  end
end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
log4r-1.1.2 src/log4r/repository.rb
log4r-1.1.1 src/log4r/repository.rb
log4r-1.1.0 src/log4r/repository.rb
log4r-1.0.6 src/log4r/repository.rb