code: def _ParseLogLine(self, parser_mediator, structure, key):
      
      time_elements_tuple = self._GetTimeElementsTuple(structure)
  
      try:
        date_time = dfdatetime_time_elements.TimeElements(
            time_elements_tuple=time_elements_tuple)
      except ValueError:
        parser_mediator.ProduceExtractionWarning(
            'invalid date time value: {0!s}'.format(structure.date_time))
        return
  
      self._last_month = time_elements_tuple[1]
  
      if key == 'logline':
        self._previous_structure = structure
        message = structure.message
      else:
        message = 'Repeated {0:d} times: {1:s}'.format(
            structure.times, self._previous_structure.message)
        structure = self._previous_structure
  
      # It uses CarsNotIn structure which leaves whitespaces
      # at the beginning of the sender and the caller.
  
      event_data = MacOSSecuritydLogEventData()
      event_data.caller = structure.caller.strip() or 'unknown'
      event_data.facility = structure.facility
      event_data.level = structure.level
      event_data.message = message
      event_data.security_api = structure.security_api or 'unknown'
      event_data.sender_pid = structure.sender_pid
      event_data.sender = structure.sender.strip()
  
      event = time_events.DateTimeValuesEvent(
          date_time, definitions.TIME_DESCRIPTION_ADDED)
      parser_mediator.ProduceEventWithEventData(event, event_data)
docs: Parse a single log line and produce an event object.
  
      Args:
        parser_mediator (ParserMediator): mediates interactions between parsers
            and other components, such as storage and dfvfs.
        structure (pyparsing.ParseResults): structure of tokens derived from
            a line of a text file.
        key (str): name of the parsed structure.