假设我要在Celery中定期执行以下功能:
import logging
import requests
log = logging.getLogger(__name__)
def spam():
data = fetch_some_data()
log.info(f'Fetched {len(data)} data')
stuff = []
for item in data:
try:
response = requests.get(url + item)
response.raise_for_status()
except RequestException as exc:
log.error(f'Error when requesting {item}: {exc}')
continue
stuff.append(response.text)
for item in stuff:
do_something(item)
log.info(f'Processed {len(stuff)} items')
执行附带的任务时:
from hello import spam
@app.task
def run():
spam()
我想查看任务的结果以及记录的消息。例如,Flower可以显示task progress and history,但我想将日志记录信息添加为单独的字段(例如“信息消息”和“错误消息”)。同样,如果使用django-celery-results,则它可以在Django Admin视图中显示相同的信息。
实现此目标的最佳方法是什么?
答案 0 :(得分:0)
只需利用 after_setup_logger 装饰器。您可以在celery启动时注册记录器,以便可以在celery任务中使用它。
@after_setup_logger.connect
def setup_loggers(logger, *args, **kwargs):
import logging
fh = logging.FileHandler('/path/to/file')
logger = logging.getLogger("test-logger")
logger.addHandler(fh)
现在,您可以在任务中使用“测试记录器”记录器,并将日志重定向到文件中。