Module: Reality::Logging

Defined in:
lib/reality/logging.rb

Defined Under Namespace

Modules: Assertions

Class Method Summary collapse

Class Method Details

.configure(module_type, level = ::Logger::INFO, stream = STDOUT) ⇒ Object

noinspection RubyDynamicConstAssignment



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/reality/logging.rb', line 52

def configure(module_type, level = ::Logger::INFO, stream = STDOUT)
  logger = ::Logger.new(stream)
  logger.level = level
  logger.formatter = proc { |severity, datetime, progname, msg| "#{msg}\n" }

  module_type.const_set(:Logger, logger)
  module_type.instance_eval do
    def self.debug(message)
      self.const_get(:Logger).debug(message)
    end

    def self.info(message)
      self.const_get(:Logger).info(message)
    end

    def self.warn(message)
      self.const_get(:Logger).warn(message)
    end

    def self.error(message)
      self.const_get(:Logger).error(message)
      raise message
    end
  end
end

.set_levels(levels, *loggers) ⇒ Object

Set the levels on an array of loggers. The levels parameter must be an array matching the number of loggers supplied or a single level. If a block is supplied then the levels are set to the specified values for the duration of the block and then reset to original values after the block completes.



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/reality/logging.rb', line 24

def set_levels(levels, *loggers)
  if levels.is_a?(Array) && levels.size != loggers.size
    raise "Attempting to set log levels using an array of size #{levels.size} that does not match the number of loggers supplied #{loggers.size}"
  end

  if block_given?
    saved_levels = []
    loggers.each_with_index do |logger, index|
      saved_levels[index] = logger.level
    end
    begin
      loggers.each_with_index do |logger, index|
        logger.level = levels.is_a?(Array) ? levels[index] : levels
      end
      yield
    ensure
      loggers.each_with_index do |logger, index|
        logger.level = saved_levels[index]
      end
    end
  else
    loggers.each_with_index do |logger, index|
      logger.level = levels.is_a?(Array) ? levels[index] : levels
    end
  end
end