diff options
author | Mervyn Chng <mervyn@zopim.com> | 2016-08-08 09:25:01 +0000 |
---|---|---|
committer | Mervyn Chng <mervyn@zopim.com> | 2016-08-08 09:32:40 +0000 |
commit | d53948b5f092c06b80808c0688b6d191cc125f1a (patch) | |
tree | ffa28cce18db78db48e3f86e138d9be147f8b16e | |
parent | e03c642d689ff9d69ba1e2f3cb08c52ea89c2db0 (diff) | |
download | raven-d53948b5f092c06b80808c0688b6d191cc125f1a.tar.gz |
Add Celery config option to ignore expected exceptions
-rw-r--r-- | docs/integrations/celery.rst | 11 | ||||
-rw-r--r-- | raven/contrib/celery/__init__.py | 5 |
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] |