module Telemetry::Logger::Levels

Public Class Methods

build_level_index() click to toggle source
# File lib/telemetry/logger/levels.rb, line 41
def self.build_level_index
  table = {}

  levels.each_with_index do |level, index|
    table[level] = index
  end

  table
end
define_level(level, cls) click to toggle source
# File lib/telemetry/logger/levels.rb, line 31
def self.define_level(level, cls)
  cls.send :define_method, level do |message|
    write_level(__method__, message)
  end
end
included(cls) click to toggle source
# File lib/telemetry/logger/levels.rb, line 25
def self.included(cls)
  levels.each do |level|
    define_level level, cls
  end
end
level_index() click to toggle source
# File lib/telemetry/logger/levels.rb, line 37
def self.level_index
  @level_index ||= build_level_index
end
levels() click to toggle source
# File lib/telemetry/logger/levels.rb, line 4
def self.levels
  [
    :todo,
    :fubar,
    :obsolete,
    :data,
    :trace,
    :debug,
    :opt_data,
    :opt_trace,
    :opt_debug,
    :info,
    :pass,
    :fail,
    :focus,
    :warn,
    :error,
    :fatal
  ]
end

Public Instance Methods

implementer() click to toggle source
# File lib/telemetry/logger/levels.rb, line 120
def implementer
  self
end
level_index() click to toggle source
# File lib/telemetry/logger/levels.rb, line 51
def level_index
  Levels.level_index
end
metadata(level) click to toggle source
# File lib/telemetry/logger/levels.rb, line 92
def metadata(level)
  if Defaults.metadata == 'off'
    return nil
  elsif Defaults.metadata == 'minimal'
    return "#{name.split('::').last}: "
  else
    level = String(level)

    if level.start_with?('opt_')
      level = "(#{level.split('_').last})"
    end

    return "[#{implementer.clock.iso8601}] #{name} #{level.upcase}: "
  end
end
omit?(level) click to toggle source
# File lib/telemetry/logger/levels.rb, line 112
def omit?(level)
  Defaults.optional == 'off' && optional_level?(level)
end
optional_level?(level) click to toggle source
# File lib/telemetry/logger/levels.rb, line 116
def optional_level?(level)
  String(level).start_with?('opt_')
end
ordinal(level) click to toggle source
# File lib/telemetry/logger/levels.rb, line 55
def ordinal(level)
  if [:_min, :_max].include?(level)
    if level == :_min
      return level_index.values.last
    else
      return level_index.values.first
    end
  end

  level_index[level]
end
sufficient_level?(level_ordinal) click to toggle source
# File lib/telemetry/logger/levels.rb, line 108
def sufficient_level?(level_ordinal)
  level_ordinal >= level_number
end
write_level(level, message) click to toggle source
# File lib/telemetry/logger/levels.rb, line 67
def write_level(level, message)
  level_ordinal = ordinal(level)
  write_message(message, level) if sufficient_level?(level_ordinal) && !omit?(level)
end
write_message(message, level) click to toggle source
# File lib/telemetry/logger/levels.rb, line 72
def write_message(message, level)
  message = message.to_s

  if message.length == 0
    message = '(empty log message)'
  end

  message.each_line do |line|
    line = line.chomp("\n") unless line.end_with?("\r\n") || line == "\n"
    line = line.gsub("\r", "\\r")
    line = line.gsub("\n", "\\n")

    message = implementer.format(line, level)
    metadata = metadata(level)
    header = implementer.format_metadata(metadata)

    implementer.write "#{header}#{message}"
  end
end