summaryrefslogtreecommitdiffstats
path: root/external_libs/python/pyzmq-14.7.0/examples/logger/zmqlogger.py
diff options
context:
space:
mode:
Diffstat (limited to 'external_libs/python/pyzmq-14.7.0/examples/logger/zmqlogger.py')
-rw-r--r--external_libs/python/pyzmq-14.7.0/examples/logger/zmqlogger.py70
1 files changed, 70 insertions, 0 deletions
diff --git a/external_libs/python/pyzmq-14.7.0/examples/logger/zmqlogger.py b/external_libs/python/pyzmq-14.7.0/examples/logger/zmqlogger.py
new file mode 100644
index 00000000..c55b51b3
--- /dev/null
+++ b/external_libs/python/pyzmq-14.7.0/examples/logger/zmqlogger.py
@@ -0,0 +1,70 @@
+"""
+Simple example of using zmq log handlers
+
+This starts a number of subprocesses with PUBHandlers that generate
+log messages at a regular interval. The main process has a SUB socket,
+which aggregates and logs all of the messages to the root logger.
+"""
+
+import logging
+from multiprocessing import Process
+import os
+import random
+import sys
+import time
+
+import zmq
+from zmq.log.handlers import PUBHandler
+
+LOG_LEVELS = (logging.DEBUG, logging.INFO, logging.WARN, logging.ERROR, logging.CRITICAL)
+
+def sub_logger(port, level=logging.DEBUG):
+ ctx = zmq.Context()
+ sub = ctx.socket(zmq.SUB)
+ sub.bind('tcp://127.0.0.1:%i' % port)
+ sub.setsockopt(zmq.SUBSCRIBE, "")
+ logging.basicConfig(level=level)
+
+ while True:
+ level, message = sub.recv_multipart()
+ if message.endswith('\n'):
+ # trim trailing newline, which will get appended again
+ message = message[:-1]
+ log = getattr(logging, level.lower())
+ log(message)
+
+def log_worker(port, interval=1, level=logging.DEBUG):
+ ctx = zmq.Context()
+ pub = ctx.socket(zmq.PUB)
+ pub.connect('tcp://127.0.0.1:%i' % port)
+
+ logger = logging.getLogger(str(os.getpid()))
+ logger.setLevel(level)
+ handler = PUBHandler(pub)
+ logger.addHandler(handler)
+ print "starting logger at %i with level=%s" % (os.getpid(), level)
+
+ while True:
+ level = random.choice(LOG_LEVELS)
+ logger.log(level, "Hello from %i!" % os.getpid())
+ time.sleep(interval)
+
+if __name__ == '__main__':
+ if len(sys.argv) > 1:
+ n = int(sys.argv[1])
+ else:
+ n = 2
+
+ port = 5555
+
+ # start the log generators
+ workers = [ Process(target=log_worker, args=(port,), kwargs=dict(level=random.choice(LOG_LEVELS))) for i in range(n) ]
+ [ w.start() for w in workers ]
+
+ # start the log watcher
+ try:
+ sub_logger(port)
+ except KeyboardInterrupt:
+ pass
+ finally:
+ [ w.terminate() for w in workers ]