Class: Vx::Instrumentation::Logger::Formatter

Inherits:
Object
  • Object
show all
Defined in:
lib/vx/instrumentation/logger.rb

Class Method Summary collapse

Class Method Details

.call(severity, _, _, msg) ⇒ Object



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/vx/instrumentation/logger.rb', line 73

def self.call(severity, _, _, msg)
  values = Vx::Instrumentation.default.dup

  case
  when msg.is_a?(Hash)
    values.deep_merge! msg
  when msg.respond_to?(:to_h)
    values.merge! msg.to_h
  else
    values.deep_merge!(message: msg)
  end

  values.deep_merge!(severity: severity.to_s.downcase)

  values = make_safe_hash(values)

  ::JSON.dump(values) + "\n"
end

.make_safe_hash(msg, options = {}) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/vx/instrumentation/logger.rb', line 60

def self.make_safe_hash(msg, options = {})
  msg.inject({}) do |acc, pair|
    msg_key, msg_value = pair

    if msg_key == "@fields"
      acc[msg_key] = make_safe_hash(msg_value, join_arrays: true)
    else
      acc[msg_key] = safe_value(msg_value, options)
    end
    acc
  end
end

.safe_value(value, options = {}) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/vx/instrumentation/logger.rb', line 44

def self.safe_value(value, options = {})
  case value.class.to_s
  when "String", "Fixnum", "Float"
    value
  when "Symbol", "BigDecimal"
    value.to_s
  when "Array"
    value = value.map(&:to_s)
    options[:join_arrays] ? value.join("\n") : value
  when 'NilClass'
    nil
  else
    value.inspect
  end
end