0

我有一个带有自动重传的 Celery 任务设置,因为它轮询外部 REST API。如果 API 无法访问,则重新传输工作正常,除了在最后一次重试后它抛出task_failed然后转储页面的原始 HTML 和 CSS 代码,上面写着Sorry! The page you’re looking for cannot be found.

假设 HTML 和 CSS 代码来自任务异常,我的问题是如何配置任务(或记录器)以隐藏异常转储?

这就是我的代码的样子:

import structlog
log = structlog.get_logger(__name__)

class BaseTaskWithRetry(Task):
    autoretry_for = (ccxt.DDoSProtection,
                     ccxt.RateLimitExceeded,
                     ccxt.RequestTimeout,
                     ccxt.ExchangeNotAvailable,
                     ccxt.NetworkError)

    retry_kwargs = {'max_retries': 5, 'default_retry_delay': 3}
    retry_backoff = True
    retry_backoff_max = 30
    retry_jitter = False

@shared_task(bind=True, base=BaseTaskWithRetry)
def update_market(self, exid):

    log.info('Update market')

    client = do_stuff(exid)
    response = client.action()

输出如下所示:

2021-05-19 14:13:15.399638 [info     ] Update prices   [marketsdata.tasks]
2021-05-19 14:13:30.000435 [warning  ] task_retrying   [django_structlog.celery.receivers]
2021-05-19 14:13:15.399638 [info     ] Update prices   [marketsdata.tasks]
2021-05-19 14:13:30.000435 [warning  ] task_retrying   [django_structlog.celery.receivers]
2021-05-19 14:13:15.399638 [info     ] Update prices   [marketsdata.tasks]
2021-05-19 14:13:30.000435 [warning  ] task_retrying   [django_structlog.celery.receivers]
2021-05-19 14:13:15.399638 [info     ] Update prices   [marketsdata.tasks]
2021-05-19 14:13:30.000435 [warning  ] task_retrying   [django_structlog.celery.receivers]
2021-05-19 14:13:15.399638 [info     ] Update prices   [marketsdata.tasks]
2021-05-19 14:13:30.000435 [warning  ] task_retrying   [django_structlog.celery.receivers]
2021-05-19 14:13:15.399638 [info     ] Update prices   [marketsdata.tasks]
2021-05-19 14:14:54.738525 [error    ] task_failed     [django_structlog.celery.receivers]
<!-- saved from url=(0032)https://www.example.com/en/error -->
<html>

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

  <meta name="format-detection" content="telephone=no,email=no,address=no">
  <title>ABC</title>
  <link rel="Shortcut Icon" href="https://www.example.com/en/favicon.ico">
  <style>
    body {
      margin: 0
    ...
  ...
</body>
Task marketsdata.tasks.update_market[814ee174-5379-47e3-9840-04f4430f7afe] raised unexpected ...
4

0 回答 0