def add_message(message, info: nil)
      self.last_message = message
      self.last_info = info
      self.last_item = Item.new(message, info)

      # add to each recording group
      recording_groups.each do |group|
        group << Item.new(message, info)
      end

      @uniq_trace_streams.each do |stream|
        stream.puts message
      end

      return self
    end
def add_message(message, info: nil)
      self.last_message = message
      self.last_info = info
      self.last_item = Item.new(message, info)

      # add to each recording group
      recording_groups.each do |group|
        group << Item.new(message, info)
      end

      @uniq_trace_streams.each do |stream|
        stream.puts message
      end

      return self
    end
Adds a diagnostic message.
 Use it to record warnings and reasons for errors.
 Do not use when the input is nil - code that have produced that nil
 could have already recorded a specific message for that.