class Vx::Lib::Instrumentation::Logger::Formatter

Public Class Methods

call(severity, _, _, msg) click to toggle source
# 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 = {}) click to toggle source
# 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 = {}) click to toggle source
# 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