[Python-checkins] cpython (merge 3.2 -> default): Closes #14436: merged fix from 3.2.

vinay.sajip python-checkins at python.org
Thu Mar 29 21:19:07 CEST 2012


http://hg.python.org/cpython/rev/86a1f92c66b3
changeset:   75989:86a1f92c66b3
parent:      75985:971a8d291af9
parent:      75988:cd8347e15f62
user:        Vinay Sajip <vinay_sajip at yahoo.co.uk>
date:        Thu Mar 29 20:18:21 2012 +0100
summary:
  Closes #14436: merged fix from 3.2.

files:
  Lib/logging/handlers.py |  15 ++++++++++-----
  1 files changed, 10 insertions(+), 5 deletions(-)


diff --git a/Lib/logging/handlers.py b/Lib/logging/handlers.py
--- a/Lib/logging/handlers.py
+++ b/Lib/logging/handlers.py
@@ -559,11 +559,16 @@
         """
         ei = record.exc_info
         if ei:
-            dummy = self.format(record) # just to get traceback text into record.exc_text
-            record.exc_info = None  # to avoid Unpickleable error
-        s = pickle.dumps(record.__dict__, 1)
-        if ei:
-            record.exc_info = ei  # for next handler
+            # just to get traceback text into record.exc_text ...
+            dummy = self.format(record)
+        # See issue #14436: If msg or args are objects, they may not be
+        # available on the receiving end. So we convert the msg % args
+        # to a string, save it as msg and zap the args.
+        d = dict(record.__dict__)
+        d['msg'] = record.getMessage()
+        d['args'] = None
+        d['exc_info'] = None
+        s = pickle.dumps(d, 1)
         slen = struct.pack(">L", len(s))
         return slen + s
 

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list