class Mamiya::Logger

Attributes

color[RW]

Public Class Methods

defaults() click to toggle source
# File lib/mamiya/logger.rb, line 12
def self.defaults
  return @defaults if @defaults
  if ENV["MAMIYA_LOG_LEVEL"]
    level = ::Logger::Severity.const_get(ENV["MAMIYA_LOG_LEVEL"].upcase) rescue INFO
  else
    level = INFO
  end
  @defaults = {color: nil, outputs: [STDOUT], level: level}
end
new(color: self.class.defaults[:color], outputs: self.class.defaults[:outputs], level: self.class.defaults[:level]) click to toggle source
# File lib/mamiya/logger.rb, line 22
def initialize(color: self.class.defaults[:color], outputs: self.class.defaults[:outputs], level: self.class.defaults[:level])
  @logdev = LogDev.new(outputs)
  @logger = ::Logger.new(@logdev)
  @logger.level = level
  @logger.formatter = method(:format)

  @color = color.nil? ? @logdev.tty? : color
end

Public Instance Methods

[](progname) click to toggle source
# File lib/mamiya/logger.rb, line 74
def [](progname)
  self.dup.tap do |new_logger|
    new_logger.instance_eval do
      if @logger.progname && !@logger.progname.empty?
        @logger.progname = "#{@logger.progname}/#{progname}"
      else
        @logger.progname = progname
      end
    end
  end
end
add_output(*outputs) click to toggle source
# File lib/mamiya/logger.rb, line 41
def add_output(*outputs)
  @logdev.add(*outputs)
end
dup() click to toggle source
# File lib/mamiya/logger.rb, line 60
def dup
  self.orig_dup.tap  do |new_logger|
    new_logger.instance_eval do
      @logger = @logger.dup
    end
  end
end
Also aliased as: orig_dup
orig_dup()
Alias for: dup
remove_output(*outputs) click to toggle source
# File lib/mamiya/logger.rb, line 45
def remove_output(*outputs)
  @logdev.remove(*outputs)
end
with_additional_file(*outputs) { || ... } click to toggle source
# File lib/mamiya/logger.rb, line 49
def with_additional_file(*outputs)
  @logdev.add_output(*outputs)

  yield

ensure
  @logdev.remove_output(*outputs)
end
with_clean_progname() click to toggle source
# File lib/mamiya/logger.rb, line 68
def with_clean_progname
  self.dup.tap do |new|
    new.progname = nil
  end
end

Private Instance Methods

format(severity, time, progname, msg) click to toggle source
# File lib/mamiya/logger.rb, line 88
def format(severity, time, progname, msg)
  rseverity = " #{severity.rjust(5)} "
  if @color
    colored_severity = case severity
      when 'ANY'.freeze
        rseverity
      when 'DEBUG'.freeze
        Term::ANSIColor.on_black(rseverity)
      when 'INFO'.freeze
        Term::ANSIColor.on_blue(rseverity)
      when 'WARN'.freeze
        Term::ANSIColor.on_yellow(Term::ANSIColor.black(rseverity))
      when 'ERROR'.freeze
        Term::ANSIColor.on_magenta(rseverity)
      when 'FATAL'.freeze
        Term::ANSIColor.on_red(Term::ANSIColor.white(Term::ANSIColor.bold(rseverity)))
      else
        rseverity
      end
  else
    colored_severity = "#{rseverity}|"
  end

  msg = "#{(progname && "[#{progname}] ")}#{msg}"
  if @color
    colored_msg = case severity
      when 'DEBUG'.freeze
        Term::ANSIColor.bright_black(msg)
      when 'FATAL'.freeze
        Term::ANSIColor.bold(msg)
      else
        msg
      end
  else
    colored_msg = msg
  end

  formatted_time = time.strftime('%m/%d %H:%M:%S')
  colored_time = @color ? Term::ANSIColor.bright_black(formatted_time) : formatted_time

  "#{colored_time} " \
  "#{colored_severity} " \
  "#{colored_msg}" \
  "\n"
end