Class: Nucleon::Util::Logger

Inherits:
Object
  • Object
show all
Defined in:
lib/core/util/logger.rb

Overview

  • Nucleon::Core (base logging capable object)

Constant Summary collapse

@@level =

Global log level

Can be:

  • :debug

  • :info

  • :warn

  • :error

nil
@@loggers =

Global collection of instantiated loggers

{}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Logger

Initialize a new logging object

TODO: Figure out some way to make the logger system pluggable?

  • Parameters

    • Hash

      options Logger options

      • String

        :resource Logger resource identifier (also serves as prefix)

      • nil, Log4r

        :logger Log4r logger of nil if new one created

  • Returns

    • Void

      This method does not return a value

  • Errors

See also:

  • #logger=

  • Nucleon::Config::ensure



205
206
207
208
209
210
211
212
213
214
215
216
217
218
# File 'lib/core/util/logger.rb', line 205

def initialize(options = {})
  if options.is_a?(String)
    options = { :logger => options }
  end
  config = Config.ensure(options)

  @resource = config.get(:resource, '')

  if config.get(:logger, false)
    self.logger = config[:logger]
  else
    self.logger = Log4r::Logger.new(@resource)
  end
end

Instance Attribute Details

#resourceObject (readonly)

String

Logger resource name

This is the string identifier and logger prefix used when logging.



241
242
243
# File 'lib/core/util/logger.rb', line 241

def resource
  @resource
end

Class Method Details

.add_logger(name, logger) ⇒ Object

Add a instantiated logger to the global logger registry.

TODO: Is there a better way to handle the outputter for more flexibility?

  • Parameters

    • Symbol, String

      name Logger name

    • Log4r

      logger Log4r instance to register

  • Returns

    • Void

      This method does not return a value

  • Errors

See also:

  • ::set_level



158
159
160
161
162
163
164
165
# File 'lib/core/util/logger.rb', line 158

def self.add_logger(name, logger)
  logger.outputters = Log4r::StdoutOutputter.new('console')

  level = Logger.level.nil? ? 'off' : Logger.level
  set_level(level, logger)

  @@loggers[name.to_sym] = logger
end

.levelObject

Check current global log level

  • Parameters

  • Returns

    • Symbol

      Global log level; :debug, :info, :warn, :error

  • Errors

See also:

  • ::level=



55
56
57
# File 'lib/core/util/logger.rb', line 55

def self.level
  @@level
end

.level=(level) ⇒ Object

Set current global log level

  • Parameters

    • Symbol

      level Global log level; :debug, :info, :warn, :error

  • Returns

    • Void

      This method does not return a value

  • Errors

See also:

  • ::level

  • ::set_level



73
74
75
# File 'lib/core/util/logger.rb', line 73

def self.level=level
  @@level = set_level(level)
end

.loggersObject

Return a reference to all globally instantiated loggers

  • Parameters

  • Returns

    • Hash<Symbol|Log4r>

      Collection of globally accessible loggers

  • Errors



86
87
88
# File 'lib/core/util/logger.rb', line 86

def self.loggers
  @@loggers
end

.set_level(level, logger = nil) ⇒ Object

Set the logging level for either all instantiated loggers or a specified logger.

  • Parameters

    • Symbol, String

      level Global log level; :debug, :info, :warn, :error

    • Log4r

      logger Log4r instance to set log level or all if none provided

  • Returns

    • Symbol

      Return the current global log level

  • Errors

See also:

  • ::level=



126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# File 'lib/core/util/logger.rb', line 126

def self.set_level(level, logger = nil)
  level_sym = level.to_s.downcase.to_sym
  level_id  = level.to_s.upcase

  if logger.nil?
    loggers.each do |name, registered_logger|
      @@loggers[name].level = Log4r.const_get(level_id)
    end
  else
    if logger.levels.include?(level_id)
      logger.level = Log4r.const_get(level_id)
    end
  end
  level_sym
end

.set_levels(*levels) ⇒ Object

Define a list of Log4r levels

Due to how Log4r is built this can only happen at the very beginning of our execution run before any loggers are instantiated.

This should never be called directly outside of this class.

  • Parameters

    • Symbol, String, Array<Symbol, String>

      levels Available log levels

  • Returns

    • Void

      This method does not return a value

  • Errors



105
106
107
108
109
110
# File 'lib/core/util/logger.rb', line 105

def self.set_levels(*levels)
  levels = levels.flatten.collect do |level|
    level.to_s.upcase
  end
  Log4r::Configurator.custom_levels(*levels)
end

Instance Method Details

#debug(message) ⇒ Object

Log a debug message

  • Parameters

    • String

      message Debug related message

  • Returns

    • Void

      This method does not return a value

  • Errors

See also:

  • Nucleon::Util::Console::quiet



317
318
319
320
321
# File 'lib/core/util/logger.rb', line 317

def debug(message)
  unless Util::Console.quiet
    @logger.debug(message)
  end
end

#error(message) ⇒ Object

Log an error message

  • Parameters

    • String

      message Error message

  • Returns

    • Void

      This method does not return a value

  • Errors

See also:

  • Nucleon::Util::Console::quiet



374
375
376
377
378
# File 'lib/core/util/logger.rb', line 374

def error(message)
  unless Util::Console.quiet
    @logger.error(message)
  end
end

#info(message) ⇒ Object

Log an info message

  • Parameters

    • String

      message Concise informational message

  • Returns

    • Void

      This method does not return a value

  • Errors

See also:

  • Nucleon::Util::Console::quiet



336
337
338
339
340
# File 'lib/core/util/logger.rb', line 336

def info(message)
  unless Util::Console.quiet
    @logger.info(message)
  end
end

#inspectObject

Return a string reference that identifies this logger

  • Parameters

  • Returns

    • String

      Identification string

  • Errors



229
230
231
# File 'lib/core/util/logger.rb', line 229

def inspect
  "#<#{self.class}: #{@resource}>"
end

#levelObject

Get instance logger level

  • Parameters

  • Returns

    • Integer

      Return current Log4r::Logger level

  • Errors

See also:

  • Log4r::Logger



297
298
299
# File 'lib/core/util/logger.rb', line 297

def level
  @logger.level
end

#level=(level) ⇒ Object

Set instance logger level

NOTE: This will detach the logger from the global log level!

  • Parameters

    • Integer

      level Log4r::Logger level

  • Returns

    • Void

      This method does not return a value

  • Errors

See also:

  • Log4r::Logger



281
282
283
# File 'lib/core/util/logger.rb', line 281

def level=level
  @logger.level = level unless level.nil?
end

#logger=(logger) ⇒ Object

Set current logger object

  • Parameters

    • String, Log4r

      logger Log4r object or string resource name

  • Returns

    • Void

      This method does not return a value

  • Errors

See also:

  • ::add_logger



256
257
258
259
260
261
262
263
264
# File 'lib/core/util/logger.rb', line 256

def logger=logger
  if logger.is_a?(String)
    @resource = logger
    @logger   = Log4r::Logger.new(logger)
  else
    @logger = logger
  end
  self.class.add_logger(@resource, @logger) unless self.class.loggers.has_key?(@resource)
end

#warn(message) ⇒ Object

Log a warning message (non error)

  • Parameters

    • String

      message Warning message

  • Returns

    • Void

      This method does not return a value

  • Errors

See also:

  • Nucleon::Util::Console::quiet



355
356
357
358
359
# File 'lib/core/util/logger.rb', line 355

def warn(message)
  unless Util::Console.quiet
    @logger.warn(message)
  end
end