Module: Telemetry::Logger::Levels

Included in:
ConsoleLogger, NullLogger
Defined in:
lib/telemetry/logger/levels.rb

Defined Under Namespace

Modules: Defaults

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.build_level_indexObject



41
42
43
44
45
46
47
48
49
# 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) ⇒ Object



31
32
33
34
35
# 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) ⇒ Object



25
26
27
28
29
# File 'lib/telemetry/logger/levels.rb', line 25

def self.included(cls)
  levels.each do |level|
    define_level level, cls
  end
end

.level_indexObject



37
38
39
# File 'lib/telemetry/logger/levels.rb', line 37

def self.level_index
  @level_index ||= build_level_index
end

.levelsObject



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 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

Instance Method Details

#implementerObject



120
121
122
# File 'lib/telemetry/logger/levels.rb', line 120

def implementer
  self
end

#level_indexObject



51
52
53
# File 'lib/telemetry/logger/levels.rb', line 51

def level_index
  Levels.level_index
end

#metadata(level) ⇒ Object



92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/telemetry/logger/levels.rb', line 92

def (level)
  if Defaults. == 'off'
    return nil
  elsif Defaults. == '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) ⇒ Boolean

Returns:

  • (Boolean)


112
113
114
# File 'lib/telemetry/logger/levels.rb', line 112

def omit?(level)
  Defaults.optional == 'off' && optional_level?(level)
end

#optional_level?(level) ⇒ Boolean

Returns:

  • (Boolean)


116
117
118
# File 'lib/telemetry/logger/levels.rb', line 116

def optional_level?(level)
  String(level).start_with?('opt_')
end

#ordinal(level) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
# 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) ⇒ Boolean

Returns:

  • (Boolean)


108
109
110
# File 'lib/telemetry/logger/levels.rb', line 108

def sufficient_level?(level_ordinal)
  level_ordinal >= level_number
end

#write_level(level, message) ⇒ Object



67
68
69
70
# 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) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# 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)
     = (level)
    header = implementer.()

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