logging: Added QueueHandler.prepare and updated documentation.

This commit is contained in:
Vinay Sajip 2010-09-22 20:34:53 +00:00
parent b5d23b4dfc
commit 0258ce8f0a
2 changed files with 42 additions and 13 deletions

View 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: