dsawardekar/speckle

View on GitHub
lib/logger/logger.riml

Summary

Maintainability
Test Coverage
class Logger
  def initialize
    self.messages = []
    self.log_writers = []
    self.level = 'info'

    self.levels = {}
    self.levels.all = 0
    self.levels.debug = 1
    self.levels.info = 2
    self.levels.warn = 3
    self.levels.error = 4
    self.levels.fatal = 5
    self.levels.off = 6

    self.colors = {}
    self.colors.all = 0
    self.colors.debug = 0
    self.colors.info = 0
    self.colors.warn = '31m'
    self.colors.error = '31m'
    self.colors.fatal = '31m'
    self.colors.off = 0
  end

  defm debug(*args)
    self.do_log(args, 'debug')
  end

  defm info(*args)
    self.do_log(args, 'info')
  end

  defm log(*args)
    self.do_log(args, 'info')
  end

  defm warn(*args)
    self.do_log(args, 'warn')
  end

  defm error(*args)
    self.do_log(args, 'error')
  end

  defm fatal(*args)
    self.do_log(args, 'fatal')
  end

  defm add_log_writer(log_writer)
    add(self.log_writers, log_writer)
  end

  defm set_level(level)
    self.level = level
  end

  defm get_level
    return self.level
  end

  defm get_level_num(level)
    return self.levels[level]
  end

  defm is_loggable(level)
    return self.get_level_num(level) >= self.get_level_num(self.level)
  end

  " private methods

  def do_log(args, level)
    if self.is_loggable(level)
      msg = self.args_to_message(args)
      self.send_log(msg, level)
    end
  end

  def args_to_message(args)
    return join(args, ' ')
  end

  def send_log(msg, level)
    color_msg = self.to_color(msg, level)

    for log_writer in self.log_writers
      if log_writer.get_colorize()
        log_writer.log(color_msg)
      else
        log_writer.log(msg)
      end
    end
  end

  def to_color(msg, level)
    color = self.colors[level]
    if color != 0
      return "[#{color}#{msg}"
    else
      return msg
    end
  end

end

def get_logger()
  g:logger = new Logger() unless g:logger?
  return g:logger
end

s:logger = get_logger()