def installZMQlogger(port=5800, name=None, clear=True, level=None, logger=None): """ Add ZMQ logging handler to a Python logger """ if clear: removeZMQlogger(name) ctx = zmq.Context() pub = ctx.socket(zmq.PUB) pub.setsockopt(zmq.RCVHWM, 10) pub.connect('tcp://127.0.0.1:%i' % port) if logger is None: logger = logging.getLogger() if level is not None: logger.setLevel(level) handler = PUBHandler(pub) pid = os.getpid() pstr = 'pid %d: ' % pid handler.formatters = { logging.DEBUG: logging.Formatter(pstr + "%(levelname)s %(filename)s:%(lineno)d - %(message)s\n"), logging.INFO: logging.Formatter(pstr + "%(message)s\n"), logging.WARN: logging.Formatter(pstr + "%(levelname)s %(filename)s:%(lineno)d - %(message)s\n"), logging.ERROR: logging.Formatter(pstr + "%(levelname)s %(filename)s:%(lineno)d - %(message)s - %(exc_info)s\n"), logging.CRITICAL: logging.Formatter(pstr + "%(levelname)s %(filename)s:%(lineno)d - %(message)s\n")} logger.addHandler(handler) logger.debug('installZMQlogger: handler installed') # first message always is discarded return logger
def run(self): context = zmq.Context() pub = context.socket(zmq.PUB) pub.connect(self.add_log) self.log = logging.getLogger() self.log.setLevel(logging.DEBUG) handler = PUBHandler(pub) handler.formatters = formatters self.log.addHandler(handler) self.log.debug('start_sink') self.receiver = context.socket(zmq.PULL) self.receiver.bind(self.add_rec) self.controller = context.socket(zmq.PUB) self.controller.bind(self.add_pub) #socket to sinks self.main = context.socket(zmq.PUSH) self.main.connect(self.add_push) # Message from main: start self.receiver.recv() #Measure time! t_start = time.time() results = [] for task_nbr in range(self.tasks): raw_json_data = self.receiver.recv() res = json.loads( raw_json_data, object_hook=MyOptResult.unserialize_object ) results.append(res) t_end = time.time() t_duration = t_end - t_start self.log.debug( 'Collected {count} results'.format( count=len(results), ) ) self.log.debug( 'Total elapsed time: {duration} s'.format(duration=t_duration) ) self.controller.send(b'KILL') self.handle_results(results) time.sleep(1) self.main.send(b'0')
def _start_logger(context): global log controller = context.socket(zmq.PUB) controller.bind(ADD_LOG_CONTROLLER) l = Logger(ADD_LOGGING, ADD_LOG_LH_CONTROLLER) l.start() time.sleep(2) pub = context.socket(zmq.PUB) pub.connect(ADD_LH_LOGGING) log = logging.getLogger('main') log.setLevel(logging.DEBUG) handler = PUBHandler(pub) handler.formatters = formatters log.addHandler(handler) return controller
import time import logging from zmq.log.handlers import PUBHandler import logjson from collections import defaultdict handler = PUBHandler('tcp://127.0.0.1:12345') handler.setLevel('INFO') # Override all the level formatters to use JSON handler.formatters = defaultdict(logjson.JSONFormatter) logging.basicConfig(level='DEBUG') logger = logging.getLogger() logger.setLevel(logging.DEBUG) logger.addHandler(handler) for i in range(100): logger.info('blah') time.sleep(1)