]> granicus.if.org Git - python/commitdiff
logging: Added QueueHandler.prepare and updated documentation.
authorVinay Sajip <vinay_sajip@yahoo.co.uk>
Wed, 22 Sep 2010 20:34:53 +0000 (20:34 +0000)
committerVinay Sajip <vinay_sajip@yahoo.co.uk>
Wed, 22 Sep 2010 20:34:53 +0000 (20:34 +0000)
Doc/library/logging.rst
Lib/logging/handlers.py

index 6cfd93f61bcaf92f9680cf792ba67daa3a93dcc6..04a1e5bbcd73061f23738e239143723c478bfac5 100644 (file)
@@ -944,6 +944,7 @@ Loggers have the following attributes and methods. Note that Loggers are never
 instantiated directly, but always through the module-level function
 ``logging.getLogger(name)``.
 
+.. class:: Logger
 
 .. attribute:: Logger.propagate
 
@@ -2661,7 +2662,20 @@ supports sending logging messages to a queue, such as those implemented in the
 
    .. method:: emit(record)
 
-      Sends the record to the handler's queue.
+      Enqueues the result of preparing the LogRecord.
+
+   .. method:: prepare(record)
+
+      Prepares a record for queuing. The object returned by this
+      method is enqueued.
+
+      The base implementation formats the record to merge the message
+      and arguments, and removes unpickleable items from the record
+      in-place.
+
+      You might want to override this method if you want to convert
+      the record to a dict or JSON string, or send a modified copy
+      of the record while leaving the original intact.
 
    .. method:: enqueue(record)
 
index ce0673d9a1705a34f0c315af47eafc6957112afc..3d7a6786a9f7a79ea2cf6b6987cae8803d071572 100644 (file)
@@ -1176,24 +1176,39 @@ class QueueHandler(logging.Handler):
         """
         self.queue.put_nowait(record)
 
+    def prepare(self, record):
+        """
+        Prepares a record for queuing. The object returned by this
+        method is enqueued.
+
+        The base implementation formats the record to merge the message
+        and arguments, and removes unpickleable items from the record
+        in-place.
+
+        You might want to override this method if you want to convert
+        the record to a dict or JSON string, or send a modified copy
+        of the record while leaving the original intact.
+        """
+        # The format operation gets traceback text into record.exc_text
+        # (if there's exception data), and also puts the message into
+        # record.message. We can then use this to replace the original
+        # msg + args, as these might be unpickleable. We also zap the
+        # exc_info attribute, as it's no longer needed and, if not None,
+        # will typically not be pickleable.
+        self.format(record)
+        record.msg = record.message
+        record.args = None
+        record.exc_info = None
+        return record
+
     def emit(self, record):
         """
         Emit a record.
 
-        Writes the LogRecord to the queue, preparing it for pickling first.
+        Writes the LogRecord to the queue, preparing it first.
         """
         try:
-            # The format operation gets traceback text into record.exc_text
-            # (if there's exception data), and also puts the message into
-            # record.message. We can then use this to replace the original
-            # msg + args, as these might be unpickleable. We also zap the
-            # exc_info attribute, as it's no longer needed and, if not None,
-            # will typically not be pickleable.
-            self.format(record)
-            record.msg = record.message
-            record.args = None
-            record.exc_info = None
-            self.enqueue(record)
+            self.enqueue(self.prepare(record))
         except (KeyboardInterrupt, SystemExit):
             raise
         except: