module Logging

of the object. Example for a class-level logger: # ——————– class TClass

self.extend(Logging)
@@log = init_logger(STDOUT)
def test_log
        @@log.info('class-level logger called from instance: ' << @@log.to_s)
        @log = @@log
        @log.info('AGAIN: class-level logger called from instance: ' << @log.to_s)
end
def self::test_log
        @log.info('class-level logger called from class: ' << @log.to_s)
        @@log.info('AGAIN: class-level logger called from class: ' << @@log.to_s)
end

end

Public Instance Methods

init_logger(target = STDOUT, level = Logger::INFO) click to toggle source

Call this method in an instance-method (e.g. initialize() ) to define the object-level logger; i.e. an object-specific member @log. Call this method within the class-definition for a class-level logger; i.e. a member @log for class-level acces. The method returns the logger, so you can anyway do what you want with it.

# File logging.rb, line 65
def init_logger(target = STDOUT, level = Logger::INFO)
  # Prepare for a class-level logger. This is actually quite cool.

  # ---> Ingeniuous code starts here
  cn = (self.class == Class ? name : self.class.name)
  # <--- Ingeniuous code ends here

  # 11/2019
  if (cn == 'Object')
    cn = 'Top Level'
  end

  # allow to override the set log-levels with an
  # external configuration (log.conf).
  # 11/2019
  log_conf(cn.gsub(/\s/, '_') )
  # Or use the defaults as set here or elsewhere...

  @level ||= level 
  @target ||= target

  @log = Logger.new(@target)
  @log.level = @level

  @log.formatter = proc do |severity, datetime, progname, msg|
    t = Time.now
    "#{cn}: #{severity} #{t.hour}-#{t.min}-#{t.sec}: #{msg}\n"
  end
  if ! @@have_log
    @log.debug cn.dup << ' reading logging-configuration from ' << @@LOG_CONF 
    @@have_log = true
    @log.debug('level is ' << level.to_s)
  end
  return @log
end
log_level=(level) click to toggle source

set the log-level

# File logging.rb, line 109
def log_level=(level)
  @level = level
  @log.level = @level
end
log_target=(target) click to toggle source

Set the log-target to an IO object.

# File logging.rb, line 102
def log_target=(target)
  @target = target
  @log = Logger.new(@@target)
  @log.level = @level
end