2011-08-04 62 views
17

我必须在预先存在的系统中实现Celery。系统的以前版本已经使用Python标准日志记录。在Celery中使用Python标准日志

我的代码类似于下面的代码。进程1和进程2都是非Celery函数,它们在任何地方都进行日志记录。如果出现问题,我们正在使用日志记录来跟踪数据丢失。

@task 
def add(x,y): 
    process_one(x,y) 
    process_two(x,y) 

我该如何实现Celery并使用Python标准日志记录代替Celery日志记录,因此我们的旧日志记录系统不会丢失?

我试图将import logging从Python更改为:logger = add.get_logger()并将logger传递给所有函数,但我认为这不是一个好习惯。我需要另一种解决方案

更新:在芹菜日志添加应用程序日志,您可以执行:

$ manage.py celeryd -v 2 -B -s celery -E -l debug --traceback \ 
    --settings=settings --logfile=/(path to your log folder)/celeryd.log 

随着-l(记录)作为debug,我们的应用程序/ Python记录自动包含在我们的芹菜记录:不需要执行logger = add.get_logger()

回答

17

你可能希望此设置:

CELERYD_HIJACK_ROOT_LOGGER = False 

告诉我如何工作的。

顺便说一句,它劫持根记录的原因是因为一些写的不好 库设置日志记录,一些图书馆不应该做的,导致用户体验不从celeryd 工人:(

+0

嗨Asksol输出,谢谢你的回答。我同意你关于不良库的事情。我已经尝试了CELERYD_HIJACK_ROOT_LOGGER的事情。当我向我的朋友咨询时,他告诉我CELERYD_HIJACK_ROOT_LOGGER = False并不明智,因为芹菜工作者日志记录是非常重要和更强大的。输出是,芹菜只重定向从芹菜记录器到root/python logger的日志责任,结果是一样的。我想如果它发生那样,我更喜欢使用芹菜记录器,而不是p ython之一。 – cactuarz

+6

因此,芹菜库设置日志记录,因为写得不好的库设置日志记录? ;)听起来像'你看起来很麻烦,所以我最好先拍你'的说法。 –

+0

@hheimbuerger:呵呵,很好。但将芹菜视为图书馆并不是很准确。 Celery是一个分布式任务队列*应用程序*,你基本上只是配置它(以代码的形式)与具体细节来完成你想要的。无可否认,当与Django等其他应用程序集成时,这会变得相当混乱。 – CryingCyclops

相关问题