# a simple module to be included into a class that want to log
#
# use the standard logger and the class name as the program name
#
# The standard functions are available on the log object
# And the log level may be set after inclusion with level function (that takes symbols)

require "logger"

module Logging
  def self.included(base)
    base.extend(Methods)
  end
  def log
    self.class.log
  end

  module Methods
    def log
      return @logger if @logger
      @logger = Logger.new log_stream
      @logger.progname = self.name.split("::").last
      @logger.datetime_format = '%M:%S'
      @logger.level = Logger::INFO
      @logger
    end
    def log_level l
      log.level = case l
                    when :unknown
                      Logger::UNKNOWN
                    when :fatal
                      Logger::FATAL
                    when :error
                      Logger::ERROR
                    when :warn
                      Logger::WARN
                    when :info
                      Logger::INFO
                    when :debug
                      Logger::DEBUG
                    else
                      raise "unknown log level #{l}"
                    end
    end

    private
    def log_stream
       STDOUT
    end
  end
end