summaryrefslogtreecommitdiffstats
path: root/external_libs/python/zmq/log/handlers.py
diff options
context:
space:
mode:
authorDan Klein <danklei@cisco.com>2015-08-26 18:16:09 +0300
committerDan Klein <danklei@cisco.com>2015-08-26 18:16:09 +0300
commitf8ac9d14a989c8cf1535e16165551dfa370b0b74 (patch)
tree43e396eb5d096ad74ec02afeccf8995a4d241a0f /external_libs/python/zmq/log/handlers.py
parentcdcc62972d42f009f55e6aeb2ca5c60c3acd75eb (diff)
parent53f0e28d7f30c7175cbb15884c309613593859d8 (diff)
Merge branch 'master' into dan_stateless
Diffstat (limited to 'external_libs/python/zmq/log/handlers.py')
-rw-r--r--external_libs/python/zmq/log/handlers.py146
1 files changed, 0 insertions, 146 deletions
diff --git a/external_libs/python/zmq/log/handlers.py b/external_libs/python/zmq/log/handlers.py
deleted file mode 100644
index 5ff21bf3..00000000
--- a/external_libs/python/zmq/log/handlers.py
+++ /dev/null
@@ -1,146 +0,0 @@
-"""pyzmq logging handlers.
-
-This mainly defines the PUBHandler object for publishing logging messages over
-a zmq.PUB socket.
-
-The PUBHandler can be used with the regular logging module, as in::
-
- >>> import logging
- >>> handler = PUBHandler('tcp://127.0.0.1:12345')
- >>> handler.root_topic = 'foo'
- >>> logger = logging.getLogger('foobar')
- >>> logger.setLevel(logging.DEBUG)
- >>> logger.addHandler(handler)
-
-After this point, all messages logged by ``logger`` will be published on the
-PUB socket.
-
-Code adapted from StarCluster:
-
- http://github.com/jtriley/StarCluster/blob/master/starcluster/logger.py
-"""
-
-# Copyright (C) PyZMQ Developers
-# Distributed under the terms of the Modified BSD License.
-
-
-import logging
-from logging import INFO, DEBUG, WARN, ERROR, FATAL
-
-import zmq
-from zmq.utils.strtypes import bytes, unicode, cast_bytes
-
-
-TOPIC_DELIM="::" # delimiter for splitting topics on the receiving end.
-
-
-class PUBHandler(logging.Handler):
- """A basic logging handler that emits log messages through a PUB socket.
-
- Takes a PUB socket already bound to interfaces or an interface to bind to.
-
- Example::
-
- sock = context.socket(zmq.PUB)
- sock.bind('inproc://log')
- handler = PUBHandler(sock)
-
- Or::
-
- handler = PUBHandler('inproc://loc')
-
- These are equivalent.
-
- Log messages handled by this handler are broadcast with ZMQ topics
- ``this.root_topic`` comes first, followed by the log level
- (DEBUG,INFO,etc.), followed by any additional subtopics specified in the
- message by: log.debug("subtopic.subsub::the real message")
- """
- root_topic=""
- socket = None
-
- formatters = {
- logging.DEBUG: logging.Formatter(
- "%(levelname)s %(filename)s:%(lineno)d - %(message)s\n"),
- logging.INFO: logging.Formatter("%(message)s\n"),
- logging.WARN: logging.Formatter(
- "%(levelname)s %(filename)s:%(lineno)d - %(message)s\n"),
- logging.ERROR: logging.Formatter(
- "%(levelname)s %(filename)s:%(lineno)d - %(message)s - %(exc_info)s\n"),
- logging.CRITICAL: logging.Formatter(
- "%(levelname)s %(filename)s:%(lineno)d - %(message)s\n")}
-
- def __init__(self, interface_or_socket, context=None):
- logging.Handler.__init__(self)
- if isinstance(interface_or_socket, zmq.Socket):
- self.socket = interface_or_socket
- self.ctx = self.socket.context
- else:
- self.ctx = context or zmq.Context()
- self.socket = self.ctx.socket(zmq.PUB)
- self.socket.bind(interface_or_socket)
-
- def format(self,record):
- """Format a record."""
- return self.formatters[record.levelno].format(record)
-
- def emit(self, record):
- """Emit a log message on my socket."""
- try:
- topic, record.msg = record.msg.split(TOPIC_DELIM,1)
- except Exception:
- topic = ""
- try:
- bmsg = cast_bytes(self.format(record))
- except Exception:
- self.handleError(record)
- return
-
- topic_list = []
-
- if self.root_topic:
- topic_list.append(self.root_topic)
-
- topic_list.append(record.levelname)
-
- if topic:
- topic_list.append(topic)
-
- btopic = b'.'.join(cast_bytes(t) for t in topic_list)
-
- self.socket.send_multipart([btopic, bmsg])
-
-
-class TopicLogger(logging.Logger):
- """A simple wrapper that takes an additional argument to log methods.
-
- All the regular methods exist, but instead of one msg argument, two
- arguments: topic, msg are passed.
-
- That is::
-
- logger.debug('msg')
-
- Would become::
-
- logger.debug('topic.sub', 'msg')
- """
- def log(self, level, topic, msg, *args, **kwargs):
- """Log 'msg % args' with level and topic.
-
- To pass exception information, use the keyword argument exc_info
- with a True value::
-
- logger.log(level, "zmq.fun", "We have a %s",
- "mysterious problem", exc_info=1)
- """
- logging.Logger.log(self, level, '%s::%s'%(topic,msg), *args, **kwargs)
-
-# Generate the methods of TopicLogger, since they are just adding a
-# topic prefix to a message.
-for name in "debug warn warning error critical fatal".split():
- meth = getattr(logging.Logger,name)
- setattr(TopicLogger, name,
- lambda self, level, topic, msg, *args, **kwargs:
- meth(self, level, topic+TOPIC_DELIM+msg,*args, **kwargs))
-