# 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_relative "logger"

module Util
  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.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
end