diff options
author | Vinay Sajip <vinay_sajip@yahoo.co.uk> | 2010-09-13 20:02:39 (GMT) |
---|---|---|
committer | Vinay Sajip <vinay_sajip@yahoo.co.uk> | 2010-09-13 20:02:39 (GMT) |
commit | 63891ed0821a90e163b8a604ce55f1762fae4c1f (patch) | |
tree | 93aeffc82ffeaf7f6c399ad42db51bc407fb2ab6 /Doc | |
parent | ccb706cf0ab1e8feb9f0b8e29b4e14767f364dcf (diff) | |
download | cpython-63891ed0821a90e163b8a604ce55f1762fae4c1f.zip cpython-63891ed0821a90e163b8a604ce55f1762fae4c1f.tar.gz cpython-63891ed0821a90e163b8a604ce55f1762fae4c1f.tar.bz2 |
Expanded QueueHandler documentation.
Diffstat (limited to 'Doc')
-rw-r--r-- | Doc/library/logging.rst | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/Doc/library/logging.rst b/Doc/library/logging.rst index 97480db..f3d1445 100644 --- a/Doc/library/logging.rst +++ b/Doc/library/logging.rst @@ -2605,7 +2605,9 @@ supports sending logging messages to a queue, such as those implemented in the .. class:: QueueHandler(queue) Returns a new instance of the :class:`QueueHandler` class. The instance is - initialized with the queue to send messages to. + initialized with the queue to send messages to. The queue can be any queue- + like object; it's passed as-is to the :meth:`enqueue` method, which needs + to know how to send messages to it. .. method:: emit(record) @@ -2623,6 +2625,37 @@ supports sending logging messages to a queue, such as those implemented in the The :class:`QueueHandler` class was not present in previous versions. +.. _zeromq-handlers: + +You can use a :class:`QueueHandler` subclass to send messages to other kinds +of queues, for example a ZeroMQ "publish" socket. In the example below,the +socket is created separately and passed to the handler (as its 'queue'):: + + import zmq # using pyzmq, the Python binding for ZeroMQ + import json # for serializing records portably + + ctx = zmq.Context() + sock = zmq.Socket(ctx, zmq.PUB) # or zmq.PUSH, or other suitable value + sock.bind('tcp://*:5556') # or wherever + + class ZeroMQSocketHandler(QueueHandler): + def enqueue(self, record): + data = json.dumps(record.__dict__) + self.queue.send(data) + +Of course there are other ways of organizing this, for example passing in the +data needed by the handler to create the socket:: + + class ZeroMQSocketHandler(QueueHandler): + def __init__(self, uri, socktype=zmq.PUB, ctx=None): + self.ctx = ctx or zmq.Context() + socket = zmq.Socket(self.ctx, socktype) + super(ZeroMQSocketHandler, self).__init__(socket) + + def enqueue(self, record): + data = json.dumps(record.__dict__) + self.queue.send(data) + .. _formatter-objects: |