diff --git a/django/dispatch/dispatcher.py b/django/dispatch/dispatcher.py
index ed9da57..b2abd21 100644
--- a/django/dispatch/dispatcher.py
+++ b/django/dispatch/dispatcher.py
@@ -1,3 +1,4 @@
+import sys
 import weakref
 import threading
 
@@ -173,7 +174,7 @@ class Signal(object):
             responses.append((receiver, response))
         return responses
 
-    def send_robust(self, sender, **named):
+    def send_robust(self, sender, exc_info=False, **named):
         """
         Send signal from sender to all connected receivers catching errors.
 
@@ -184,6 +185,11 @@ class Signal(object):
                 registered with a connect if you actually want something to
                 occur).
 
+            exc_info
+                If an exception occurs in a receiver, return a triple (type,
+                exception, traceback) as the response instead of just an exception
+                instance.
+
             named
                 Named arguments which will be passed to receivers. These
                 arguments must be a subset of the argument names defined in
@@ -194,7 +200,9 @@ class Signal(object):
 
         If any receiver raises an error (specifically any subclass of
         Exception), the error instance is returned as the result for that
-        receiver.
+        receiver. If exc_info is True, a triple that includes the exception type,
+        the exception instance, and a traceback (type, exception, traceback) will
+        be returned instead of just the error instance.
         """
         responses = []
         if not self.receivers:
@@ -206,7 +214,10 @@ class Signal(object):
             try:
                 response = receiver(signal=self, sender=sender, **named)
             except Exception, err:
-                responses.append((receiver, err))
+                if exc_info:
+                    responses.append((receiver, sys.exc_info()))
+                else:
+                    responses.append((receiver, err))
             else:
                 responses.append((receiver, response))
         return responses
diff --git a/docs/topics/signals.txt b/docs/topics/signals.txt
index df4b58b..9450749 100644
--- a/docs/topics/signals.txt
+++ b/docs/topics/signals.txt
@@ -231,7 +231,7 @@ Sending signals
 There are two ways to send send signals in Django.
 
 .. method:: Signal.send(sender, **kwargs)
-.. method:: Signal.send_robust(sender, **kwargs)
+.. method:: Signal.send_robust(sender, exc_info=True, **kwargs)
 
 To send a signal, call either :meth:`Signal.send` or :meth:`Signal.send_robust`.
 You must provide the ``sender`` argument, and may provide as many other keyword
@@ -260,6 +260,17 @@ be notified of a signal in the face of an error.
 ``send_robust()`` catches all errors derived from Python's ``Exception`` class,
 and ensures all receivers are notified of the signal. If an error occurs, the
 error instance is returned in the tuple pair for the receiver that raised the error.
+If ``exc_info`` is ``True``, a triple containing the error type, error instance and
+traceback is returned instead of the error instance. This is identical to the value
+returned by calling ``sys.exc_info()`` at the point of the exception and may be
+useful for logging or debugging purposes.
+
+
+.. versionchanged:: 1.4
+   A triple containing the exception type, the exception instance and a full traceback
+   can be returned as the response (instead of just a simple error instance) for a receiver that
+   raises an exception by setting ``exc_info`` to ``True`` when calling
+   ``send_robust()``.
 
 Disconnecting signals
 =====================
diff --git a/tests/regressiontests/dispatch/tests/test_dispatcher.py b/tests/regressiontests/dispatch/tests/test_dispatcher.py
index a16d8e2..44c4cc0 100644
--- a/tests/regressiontests/dispatch/tests/test_dispatcher.py
+++ b/tests/regressiontests/dispatch/tests/test_dispatcher.py
@@ -1,5 +1,6 @@
 import gc
 import sys
+from types import TracebackType
 
 from django.dispatch import Signal
 from django.utils import unittest
@@ -98,8 +99,15 @@ class DispatcherTests(unittest.TestCase):
         a_signal.connect(fails)
         result = a_signal.send_robust(sender=self, val="test")
         err = result[0][1]
+        self.assertEqual(len(result[0]), 2)
         self.assertTrue(isinstance(err, ValueError))
         self.assertEqual(err.args, ('this',))
+
+        result = a_signal.send_robust(sender=self, exc_info=True, val="test")
+        exc_info_triple = result[0][1]
+        self.assertEqual(exc_info_triple[0], ValueError)
+        self.assertTrue(isinstance(exc_info_triple[1], ValueError))
+        self.assertTrue(isinstance(exc_info_triple[2], TracebackType))
         a_signal.disconnect(fails)
         self._testIsClean(a_signal)
 
