瀏覽代碼

Use traceback.format_exc and log instead of traceback.print_exc()

Mike Naberezny 10 年之前
父節點
當前提交
ca703616a3
共有 3 個文件被更改,包括 12 次插入8 次删除
  1. 3 1
      supervisor/http.py
  2. 5 4
      supervisor/tests/test_xmlrpc.py
  3. 4 3
      supervisor/xmlrpc.py

+ 3 - 1
supervisor/http.py

@@ -6,6 +6,7 @@ import socket
 import errno
 import pwd
 import weakref
+import traceback
 
 from supervisor.compat import urllib
 from supervisor.compat import sha1
@@ -819,7 +820,8 @@ def make_http_servers(options, supervisord):
             try:
                 inst = factory(supervisord, **d)
             except:
-                import traceback; traceback.print_exc()
+                tb = traceback.format_exc()
+                options.logger.warn(tb)
                 raise ValueError('Could not make %s rpc interface' % name)
             subinterfaces.append((name, inst))
             options.logger.info('RPC interface %r initialized' % name)

+ 5 - 4
supervisor/tests/test_xmlrpc.py

@@ -453,13 +453,14 @@ class TestDeferredXMLRPCResponse(unittest.TestCase):
             raise ValueError('foo')
         callback.delay = 1
         inst = self._makeOne(callback=callback)
-        inst.traceback = Dummy()
-        called = []
-        inst.traceback.print_exc = lambda: called.append(True)
         self.assertEqual(inst.more(), None)
         self.assertEqual(inst.request._error, 500)
         self.assertTrue(inst.finished)
-        self.assertTrue(called)
+        logged = inst.request.channel.server.logger.logged
+        self.assertEqual(len(logged), 1)
+        src, msg = logged[0]
+        self.assertEqual(src, 'XML-RPC response callback error')
+        self.assertTrue("Traceback" in msg)
 
     def test_getresponse_http_10_with_keepalive(self):
         inst = self._makeOne()

+ 4 - 3
supervisor/xmlrpc.py

@@ -61,7 +61,6 @@ class DeferredXMLRPCResponse:
     """ A medusa producer that implements a deferred callback; requires
     a subclass of asynchat.async_chat that handles NOT_DONE_YET sentinel """
     CONNECTION = re.compile ('Connection: (.*)', re.IGNORECASE)
-    traceback = traceback # for testing override
 
     def __init__(self, request, callback):
         self.callback = callback
@@ -87,8 +86,10 @@ class DeferredXMLRPCResponse:
             return self.getresponse(body)
 
         except:
-            # report unexpected exception back to server
-            self.traceback.print_exc()
+            tb = traceback.format_exc()
+            self.request.channel.server.logger.log(
+                "XML-RPC response callback error", tb
+                )
             self.finished = True
             self.request.error(500)