class Siba::SibaLogger

Constants

LogLevels

Attributes

messages[RW]
no_log[RW]
quiet[RW]
verbose[RW]
file[RW]
file_log[RW]
loggers[RW]
name[RW]
show_finish_message[RW]
stdout_log[RW]
strlog[RW]

Public Class Methods

check_log_level(level) click to toggle source
# File lib/siba/siba_logger.rb, line 15
def check_log_level(level)
  raise "Unsupported log level '#{level}'" unless SibaLogger::log_level? level
end
count(severity=nil, exact_level=true) click to toggle source
# File lib/siba/siba_logger.rb, line 24
def count(severity=nil, exact_level=true)
  return 0 if SibaLogger.messages.nil?
  return SibaLogger.messages.size if severity.nil?
  severity_i = SibaLogger.level_to_i severity
  SibaLogger.messages.count do |i|
    if exact_level
      i.level == severity_i
    else
      i.level >= severity_i
    end
  end
end
count_messages(msg, severity=nil, exact_level=true) click to toggle source

returns the number of log messages that contain given msg text

# File lib/siba/siba_logger.rb, line 38
def count_messages(msg, severity=nil, exact_level=true)
  return 0 if SibaLogger.messages.nil?
  severity_i = SibaLogger.level_to_i severity unless severity.nil?
  SibaLogger.messages.count do |i|
    match_level = true
    if severity_i
      if exact_level
        match_level = i.level == severity_i
      else
        match_level = i.level >= severity_i
      end
    end
    if match_level
      !((i.msg =~ /#{msg}/).nil?)
    else
      false
    end
  end
end
level_to_i(level) click to toggle source
# File lib/siba/siba_logger.rb, line 19
def level_to_i(level)
  check_log_level level
  SibaLogger::LogLevels.index level
end
log_level?(level) click to toggle source
# File lib/siba/siba_logger.rb, line 11
def log_level?(level)
  SibaLogger::LogLevels.include? level
end
new(name, path_to_log_file, show_start_message = true) click to toggle source
# File lib/siba/siba_logger.rb, line 61
    def initialize(name, path_to_log_file, show_start_message = true)
      @show_finish_message = true
      @name = name
      SibaLogger.messages = []
      @loggers = []

      @strlog = StringIO.new
      @loggers << Logger.new(@strlog)

      unless SibaLogger.quiet
        @stdout_log = Logger.new(STDOUT)
        @loggers << stdout_log
      end

      unless path_to_log_file.nil? || SibaLogger.no_log
        @file = File.open(path_to_log_file, "a:utf-8")
        @file_log = Logger.new(file)
        @loggers << file_log
      end

      @loggers.each do |logger|
        logger.formatter = method(:formatter)
      end

      file_log.info "
||----------NEW LOG----------||
|| #{Time.now} ||
||---------------------------||
" unless file_log.nil?

      info "#{name} started" if show_start_message
    end

Public Instance Methods

close() click to toggle source
# File lib/siba/siba_logger.rb, line 98
def close
  if show_finish_message
    if SibaLogger.count('fatal') > 0
      info "#{name} failed"
    elsif SibaLogger.count('warn', false) == 0
      info "#{name} finished successfully"
    else
      info "#{name} completed with some issues"
    end
  end

  unless file.nil?
    file.close
  end

  unless file_log.nil?
    file_log.close
  end
  @loggers = []
  @strlog = nil
  @file_log = nil
  @file = nil
  @stdout_log = nil
end
log_exception(exception, log_only_backtrace=false) click to toggle source
# File lib/siba/siba_logger.rb, line 127
def log_exception(exception, log_only_backtrace=false)
  log('debug',exception.message) unless log_only_backtrace
  unless exception.backtrace.nil?
    log('debug',"\n--- stack trace ---\n#{exception.backtrace.join("\n")}\n--- stack trace ---")
  end
end
method_missing(meth, *args, &block) click to toggle source
Calls superclass method
# File lib/siba/siba_logger.rb, line 134
def method_missing(meth, *args, &block)
  if SibaLogger::log_level? meth.to_s
    log(meth.to_s, *args, &block)
  else
    super
  end
end
respond_to?(meth) click to toggle source
Calls superclass method
# File lib/siba/siba_logger.rb, line 142
def respond_to?(meth)
  if SibaLogger::log_level? meth.to_s
    true
  else
    super
  end
end
to_s() click to toggle source
# File lib/siba/siba_logger.rb, line 94
def to_s
  strlog.string
end
warn(*args, &block) click to toggle source
# File lib/siba/siba_logger.rb, line 123
def warn(*args, &block)
  log('warn', *args, &block)
end

Private Instance Methods

formatter(severity, datetime, progname, msg) click to toggle source
# File lib/siba/siba_logger.rb, line 178
def formatter(severity, datetime, progname, msg)
  if ["INFO", "DEBUG"].include? severity
    severity = ""
  else
    severity = "WARNING" if severity == "WARN"
    severity += " - "
  end

  "#{severity}#{msg}\n"
end
log(level, *args, &block) click to toggle source
# File lib/siba/siba_logger.rb, line 153
def log(level, *args, &block)
  raise Siba::Error, "Log is closed" if loggers.empty?
  level_i = SibaLogger::level_to_i level
  unless block.nil?
    msg = block.call.to_s
  else
    assert "Wrong number of arguments" if args.size != 1
    msg = args[0].to_s
  end

  log_message = LogMessage.new
  log_message.level = level_i
  log_message.time = Time.now
  log_message.msg = msg
  SibaLogger.messages << log_message

  loggers.each do |l|
    l.send(level, msg) unless l == stdout_log
  end

  unless stdout_log.nil?
    stdout_log.send(level, EncodingHelper.encode_to_external(msg)) unless level == 'debug' && !SibaLogger.verbose
  end
end