Class: Lorekeeper::MultiLogger

Inherits:
Object
  • Object
show all
Defined in:
lib/lorekeeper/multi_logger.rb

Overview

Allows to create a logger that will pass information to any logger registered It is useful so send the same message through different loggers to different sinks

Instance Method Summary collapse

Constructor Details

#initializeMultiLogger

Returns a new instance of MultiLogger.



7
8
9
# File 'lib/lorekeeper/multi_logger.rb', line 7

def initialize
  @loggers = []
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args, &block) ⇒ Object



45
46
47
# File 'lib/lorekeeper/multi_logger.rb', line 45

def method_missing(method, *args, &block)
  call_loggers(method, *args, &block)
end

Instance Method Details

#add_logger(logger) ⇒ Object



11
12
13
# File 'lib/lorekeeper/multi_logger.rb', line 11

def add_logger(logger)
  @loggers << logger
end

#call_loggers(method, *args, &block) ⇒ Object



36
37
38
39
40
41
42
43
# File 'lib/lorekeeper/multi_logger.rb', line 36

def call_loggers(method, *args, &block)
  result = @loggers.map do |logger|
    logger.public_send(method, *args, &block) if logger.respond_to?(method)
  end
  # We call all the methods, delete nils and duplicates.
  # Then hope for the best taking the first value
  result.compact.uniq.first
end

#debug(*args, &block) ⇒ Object

Define all common logging methods within Multilogger to avoid NoMethodError



20
# File 'lib/lorekeeper/multi_logger.rb', line 20

def debug(*args, &block); call_loggers(:debug, *args, &block); end

#error(*args, &block) ⇒ Object



26
# File 'lib/lorekeeper/multi_logger.rb', line 26

def error(*args, &block); call_loggers(:error, *args, &block); end

#fatal(*args, &block) ⇒ Object



28
# File 'lib/lorekeeper/multi_logger.rb', line 28

def fatal(*args, &block); call_loggers(:fatal, *args, &block); end

#info(*args, &block) ⇒ Object



22
# File 'lib/lorekeeper/multi_logger.rb', line 22

def info(*args, &block); call_loggers(:info, *args, &block); end

#inspectObject



15
16
17
# File 'lib/lorekeeper/multi_logger.rb', line 15

def inspect
  "Lorekeeper multilogger, loggers: #{@loggers.map(&:inspect)}"
end

#respond_to?(method, all_included: false) ⇒ Boolean

Returns:

  • (Boolean)


32
33
34
# File 'lib/lorekeeper/multi_logger.rb', line 32

def respond_to?(method, all_included: false)
  @loggers.all? { |logger| logger.respond_to?(method, all_included) }
end

#warn(*args, &block) ⇒ Object



24
# File 'lib/lorekeeper/multi_logger.rb', line 24

def warn(*args, &block); call_loggers(:warn, *args, &block); end

#write(*args) ⇒ Object



30
# File 'lib/lorekeeper/multi_logger.rb', line 30

def write(*args); call_loggers(:write, *args); end