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

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

Class Method Summary collapse

Class Method Details

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



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/vx/lib/instrumentation/logger.rb', line 76

def self.call(severity, _, _, msg)
  values = Lib::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)

  if ENV['VX_INSTRUMENTATION_PRETTY']
    ::JSON.pretty_generate(values) + "\n"
  else
    ::JSON.dump(values) + "\n"
  end
end

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



63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/vx/lib/instrumentation/logger.rb', line 63

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



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

def self.safe_value(value, options = {})
  new_value = 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
  if new_value.is_a?(String)
    new_value.encode('UTF-8', {:invalid => :replace, :undef => :replace, :replace => '?'})
  else
    new_value
  end
end