summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMervyn Chng <mervyn@zopim.com>2016-08-08 09:25:01 +0000
committerMervyn Chng <mervyn@zopim.com>2016-08-08 09:32:40 +0000
commitd53948b5f092c06b80808c0688b6d191cc125f1a (patch)
treeffa28cce18db78db48e3f86e138d9be147f8b16e
parente03c642d689ff9d69ba1e2f3cb08c52ea89c2db0 (diff)
downloadraven-d53948b5f092c06b80808c0688b6d191cc125f1a.tar.gz
Add Celery config option to ignore expected exceptions
-rw-r--r--docs/integrations/celery.rst11
-rw-r--r--raven/contrib/celery/__init__.py5
2 files changed, 12 insertions, 4 deletions
diff --git a/docs/integrations/celery.rst b/docs/integrations/celery.rst
index 7690c9a..1cc5583 100644
--- a/docs/integrations/celery.rst
+++ b/docs/integrations/celery.rst
@@ -16,14 +16,19 @@ Celery error handling::
# register a custom filter to filter out duplicate logs
register_logger_signal(client)
- # hook into the Celery error handler
- register_signal(client)
-
# The register_logger_signal function can also take an optional argument
# `loglevel` which is the level used for the handler created.
# Defaults to `logging.ERROR`
register_logger_signal(client, loglevel=logging.INFO)
+ # hook into the Celery error handler
+ register_signal(client)
+
+ # The register_signal function can also take an optional argument
+ # `ignore_expected` which causes exception classes specified in Task.throws
+ # to be ignored
+ register_signal(client, ignore_expected=True)
+
A more complex version to encapsulate behavior:
.. code-block:: python
diff --git a/raven/contrib/celery/__init__.py b/raven/contrib/celery/__init__.py
index 5674596..3fec34c 100644
--- a/raven/contrib/celery/__init__.py
+++ b/raven/contrib/celery/__init__.py
@@ -24,8 +24,11 @@ class CeleryFilter(logging.Filter):
return extra_data.get('internal', record.funcName != '_log_error')
-def register_signal(client):
+def register_signal(client, ignore_expected=False):
def process_failure_signal(sender, task_id, args, kwargs, einfo, **kw):
+ if ignore_expected and isinstance(einfo.exception, sender.throws):
+ return
+
# This signal is fired inside the stack so let raven do its magic
if isinstance(einfo.exception, SoftTimeLimitExceeded):
fingerprint = ['celery', 'SoftTimeLimitExceeded', sender]