docs: def start(self):
          '''
          Listen to messages and publish them.
          '''
          # counter metrics for messages
          c_logs_ingested = Counter(
              'napalm_logs_listener_logs_ingested',
              'Count of ingested log messages',
              ['listener_type', 'address', 'port'],
          )
          c_messages_published = Counter(
              'napalm_logs_listener_messages_published',
              'Count of published messages',
              ['listener_type', 'address', 'port'],
          )
          self._setup_ipc()
          log.debug('Using the %s listener', self._listener_type)
          self._setup_listener()
          self.listener.start()
          # Start suicide polling thread
          thread = threading.Thread(target=self._suicide_when_without_parent, args=(os.getppid(),))
          thread.start()
          signal.signal(signal.SIGTERM, self._exit_gracefully)
          self.__up = True
          while self.__up:
              try:
                  log_message, log_source = self.listener.receive()
              except ListenerException as lerr:
                  if self.__up is False:
                      log.info('Exiting on process shutdown')
                      return
                  else:
                      log.error(lerr, exc_info=True)
                      raise NapalmLogsExit(lerr)
              log.debug('Received %s from %s. Queueing to the server.', log_message, log_source)
              if not log_message:
                  log.info('Empty message received from %s. Not queueing to the server.', log_source)
                  continue
              c_logs_ingested.labels(listener_type=self._listener_type, address=self.address, port=self.port).inc()
              self.pub.send(umsgpack.packb((log_message, log_source)))
              c_messages_published.labels(listener_type=self._listener_type, address=self.address, port=self.port).inc()