class AsciiLogger

Public Class Methods

new(name, path) click to toggle source

logger.log, “message”, :stdo logger.log, “message”, :file logger.log, “message”, :both log, error, info, warn, fatal, unknown

# File lib/ascii_invoicer/ascii_logger.rb, line 25
def initialize name, path
  path = File.expand_path path
  FileUtils.touch path
  @log_file = File.open path, ?a
  @known_loggers = [:file, :stdo, :both]
  @known_methods = [:info, :warn, :error, :fatal, :unknown]

  @file_logger = Logger.new MultiIO.new @log_file
  @stdo_logger = Logger.new STDOUT
  @both_logger = Logger.new MultiIO.new STDOUT, @log_file

  @file_logger.progname = name
  @stdo_logger.progname = name
  @both_logger.progname = name
end

Public Instance Methods

log(logger_name, method_name, message) click to toggle source
# File lib/ascii_invoicer/ascii_logger.rb, line 41
def log logger_name, method_name, message
  raise "#{method_name}, unknown method type, use #{@known_methods}" unless @known_methods.include? method_name
  raise "#{logger_name}, unknown logger type, use #{@known_loggers}" unless @known_loggers.include? logger_name

  logger_name = "@#{(logger_name.to_s)}_logger".to_sym
  if instance_variables.include? logger_name
    logger = instance_variable_get logger_name
    logger.method(method_name).call message
  else
    puts "ERROR: logger not found (#{logger_name})"
  end
end
method_missing(method_name, *stuff) click to toggle source

imitates stdlib logger interface -> AsciiLogger::error message, {:stdo:file:both}

# File lib/ascii_invoicer/ascii_logger.rb, line 55
def method_missing method_name, *stuff
  if @known_methods.include? method_name.to_sym
    message = stuff[0]
    logger  = stuff[1].to_sym if stuff[1]
    logger  = :both unless @known_loggers.include? logger
    log logger, method_name.to_sym, message
  end
end