lib/splash/loggers.rb in prometheus-splash-0.5.3 vs lib/splash/loggers.rb in prometheus-splash-0.6.0

- old
+ new

@@ -1,14 +1,22 @@ # coding: utf-8 - +# base Splash module module Splash + + # Loggers namespace module Loggers include Splash::Config @@logger=nil + + # factory for Loggers + # @param [Hash] options + # @option options [Symbol] :logger the name of the logger actually in [:cli, :daemon, :dual] + # @option options [Boolean] :force to force new instance creation (Logger is class variable) + # @return [SPlash::Loggers::<type>] type is Cli, Dual, Daemon, Web def get_logger(options = {}) logger = (get_config.loggers[:list].include? options[:logger])? options[:logger].to_s : get_config.loggers[:default].to_s aclass = "Splash::Loggers::#{logger.capitalize}" begin return @@logger = Kernel.const_get(aclass)::new if options[:force] @@ -16,26 +24,31 @@ rescue splash_exit case: :configuration_error, more: "Logger specified inexistant : #{logger}" end end + # build a session number + # @return [String] Session number def get_session return "#{Time.now.to_i.to_s}#{rand(999)}" end + # wrapper to change logger, call get_logger with force: true + # @option options [Symbol] :logger the name of the logger actually in [:cli, :daemon, :dual] def change_logger(options = {}) level = get_logger.level options[:force] = true get_logger(options).level = level end LEVELS = [:debug, :warn, :info, :result, :fatal, :unknown] ALIAS = {:flat => :info, :item => :info, :ok => :info, :ko => :info, :trigger => :info, - :schedule => :info, :arrow => :info, :send => :info, + :schedule => :info, :arrow => :info, :send => :info, :call => :info, :receive => :info, :error => :result, :success => :result } + # class template for loggers class LoggerTemplate include Splash::Config LEVELS.each do |method| @@ -46,29 +59,38 @@ ALIAS.keys.each do |method| define_method(method) do |message,session = ''| self.log({ :level => method, :message => message, :session => session}) end end + + # constructor def initialize self.level = get_config.loggers[:level] end - + # abstract method for log wrapper + # @param [Hash] options + # @option options [Symbol] :level, a valid level in LEVELS or ALIAS + # @option options [String] :message text def log(options) level = (ALIAS.keys.include? options[:level])? ALIAS[options[:level]] : options[:level] if @active_levels.include? level then puts options[:message] end end - + # getter for the current level + # @return [Symbol] level def level return @active_levels.first end + # virtual setter for level, set the current level + # @raise a badLevel in case of bad level + # @param [Symbol] level def level=(level) if LEVELS.include? level then @active_levels = LEVELS.dup @active_levels.shift(LEVELS.index(level)) else @@ -76,17 +98,21 @@ end end private + # mapper for symbol Symbol to String + # @param [Symbol] symbol + # @return [String] in upcase, exception :arrow give '=>', :flat give '' def alt(symbol) return "=>" if symbol == :arrow return '' if symbol == :flat return symbol.to_s.upcase end end + # badLevel Exception class BadLevel < Exception; end end end