Beispiel #1
0
 def start_logPublisher(self, publish):
     log = logging.getLogger()
     log.info('Activating log publisher on port {}'.format(publish))
     zmq_log_handler = PUBHandler("tcp://*:{}".format(publish))
     zmq_log_handler.setFormatter(
         logging.Formatter(fmt='{asctime}|{message}', style='{'))
     zmq_log_handler.root_topic = self.nodename
     log.addHandler(zmq_log_handler)
     if self.camwatcher:
         handoff = {
             'node': self.nodename,
             'log': self.publish_log,
             'video': self.publish_cam,
             'host': socket.gethostname()
         }
         msg = "CameraUp|" + json.dumps(handoff)
         try:
             with zmq.Context().socket(zmq.REQ) as sock:
                 log.debug('connecting to ' + self.camwatcher)
                 sock.connect(self.camwatcher)
                 sock.send(msg.encode("ascii"))
                 resp = sock.recv().decode("ascii")
         except Exception as ex:
             log.exception('Unable to connect with camwatcher:' + ex)
             sys.exit()
     log.handlers.remove(
         log.handlers[0])  # OK, all logging over PUB socket only
     log.setLevel(logging.INFO)
     return log
Beispiel #2
0
class LogPublisher(object):
    """
    Centralized logger publisher, used in MP.Process.run() to send log message to log collector.
    """
    def __init__(self, ip="127.0.0.1", port=8000):
        self._logger = logging.getLogger("LogPublisher")
        self._logger.setLevel(logging.DEBUG)
        self.ctx = zmq.Context()
        self.socket = self.ctx.socket(zmq.PUB)
        self.socket.bind("tcp://{}:{}".format(ip, port))
        self.handler = PUBHandler(self.socket)
        self.format = logging.Formatter(
            "[%(filename)s:%(lineno)d] %(levelname)s %(message)s")
        self.handler.setFormatter(self.format)
        self._logger.addHandler(self.handler)

    @property
    def logger(self):
        return self._logger