在Celery中使用Python标准日志记录

cac*_*arz 18 python django standards logging celery

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

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

@task
def add(x,y):
    process_one(x,y)
    process_two(x,y)
Run Code Online (Sandbox Code Playgroud)

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

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

更新:要在Celery日志记录中添加应用程序日志记录,您可以执行:

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

使用-l(logging)as debug,我们的应用程序/ Python日志记录将自动包含在我们的Celery日志记录中:无需执行logger = add.get_logger().

ask*_*sol 17

你可能想要这个设置:

CELERYD_HIJACK_ROOT_LOGGER = False
Run Code Online (Sandbox Code Playgroud)

告诉我这是怎么回事.

顺便说一句,它劫持根记录器的原因是因为一些写得很糟糕的库设置了日志记录,这是库永远不会做的事情,导致用户体验到没有来自celeryd worker的输出:(

  • 因此,芹菜库设置了日志记录,因为编写错误的库设置了日志记录?;)听起来像'你看起来像麻烦,所以我最好先拍你'的论点. (8认同)
  • @Manganeez嗯,在这种情况下,我将我的声明更改为:"因此芹菜设置日志记录,因为其他编写糟糕的软件会设置日志记录." 我的观点仍然存在:芹菜含蓄地批评其他软件篡改了日志设置.我的问题是芹菜篡改我的日志记录设置.我觉得这很讽刺.无论您将其称为库还是应用程序. (6认同)