Class: Polylog::MultiProvider

Inherits:
Object
  • Object
show all
Defined in:
lib/polylog/multi_provider.rb

Overview

The purpose of a MultiProvider is to provide a default logger instance when requested. Other loggers can be provided by registering them with the provider under the appropriate logger name. So when this name is passed to the ‘logger` method the registered logger instance will be returned.

The example below shows how to use the MultiProvider to send all log messages from all instances of a single class to a log file instead of STDOUT. You might want to do this when debugging the class; you can set the logger level to debug and capture lots of text to a single location.

Examples

provider = Polylog::MultiProvider.new(Logger.new(STDOUT))
provider['MyClass'] = Logger.new('my_class.log')

Polylog.register_provider 'example', provider
Polylog.use_provider 'example'

logger          = Polylog.logger             # STDOUT logger
my_class_logger = Polylog.logger(MyClass)    # 'my_class.log' logger

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(logger) ⇒ MultiProvider

Create a new MultiProvider configured with the given logger as the default logger. Other loggers can be added to the provider. These will be returned by the provider (instead of the default logger) when their name is passed to the ‘logger` method.

logger - The default logger to return.



33
34
35
36
# File 'lib/polylog/multi_provider.rb', line 33

def initialize( logger )
  @hash = Hash.new
  @default_logger = logger
end

Instance Attribute Details

#default_loggerObject

Accessor for getting and setting the default logger.



39
40
41
# File 'lib/polylog/multi_provider.rb', line 39

def default_logger
  @default_logger
end

Instance Method Details

#[](name) ⇒ Object

Returns the logger or ‘nil` if the logger is not present.

name - The logger name as a String.



53
54
55
# File 'lib/polylog/multi_provider.rb', line 53

def []( name )
  @hash[name]
end

#[]=(name, logger) ⇒ Object

Add a logger provider under the given name.

name - The logger name as a String. logger - The logger.

Returns the logger.



63
64
65
# File 'lib/polylog/multi_provider.rb', line 63

def []=( name, logger )
  @hash[name] = logger
end

#logger(name) ⇒ Object

Returns the named logger if it is present in the provider. If the named logger is not present then the default logger is returned.

name - The logger name as a String.



45
46
47
48
# File 'lib/polylog/multi_provider.rb', line 45

def logger( name )
  return default_logger if name.nil?
  @hash.fetch(name, default_logger)
end

#logger?(name) ⇒ Boolean

Returns ‘true` if the logger is present in the provider.

name - The logger name as a String.

Returns:

  • (Boolean)


75
76
77
# File 'lib/polylog/multi_provider.rb', line 75

def logger?( name )
  @hash.key? name
end

#loggersObject

Returns an Array with the names of the loggers present in the provider.



68
69
70
# File 'lib/polylog/multi_provider.rb', line 68

def loggers
  @hash.keys
end