class KPM::TraceLogger

def add(group, key, message)

def add(group, key, message)
  add_to_hash(group, key, message)
end

def add_to_hash(group, key, message)

This procedures will store the logs into a hash to be later returned
def add_to_hash(group, key, message)
  if group.nil? || key.nil?
    add_with_key(group || key, message)
  else
    container_key = group.to_sym
    @trace[container_key] ||= {}
    child_key = key.to_sym
    if @trace[container_key][child_key].nil?
      @trace[container_key][child_key] = message
    else
      child_is_an_array = @trace[container_key][child_key].is_a?(Array)
      old_message = nil
      old_message = @trace[container_key][child_key] unless child_is_an_array
      @trace[container_key][child_key] = [] unless child_is_an_array
      @trace[container_key][child_key].push(old_message) unless old_message.nil?
      @trace[container_key][child_key].push(message)
    end
  end
end

def add_with_key(key, message)

def add_with_key(key, message)
  child_key = key.to_sym
  if @trace[child_key].nil?
    @trace[child_key] = message
  else
    child_is_an_array = @trace[child_key].is_a?(Array)
    old_message = nil
    old_message = @trace[child_key] unless child_is_an_array
    @trace[child_key] = [] unless child_is_an_array
    @trace[child_key].push(old_message) unless old_message.nil?
    @trace[child_key].push(message)
  end
end

def initialize

def initialize
  @trace = {}
end

def to_hash

Return HASH representation of the logs
def to_hash
  @trace
end

def to_json(*_args)

Return JSON representation of the logs
def to_json(*_args)
  @trace.to_json
end

def to_s

Return String representation of the logs
def to_s
  @trace.to_s
end