如果执行在Celery任务上下文中,如何按任务记录到文件

时间:2013-03-29 07:06:43

标签: python logging celery

我想修改我当前的日志设置,而不必将logger对象作为参数传递给函数。目前在每个模块的顶部我定义了一个LOG对象

LOG = logging.getLogger(__name__)

我想更改日志记录,以便:

  • 日志记录到文件,但仅当执行上下文在Celery任务中时
  • 每个任务都有一个文件
  • 无需修改每项任务的代码

因此,如果您有两个任务:

@task
def taskOne():
  LOG.log("in task one")
  foo.foo()

@task
def taskTwo():
  LOG.log("in task two")
  foo.foo

并在模块foo中:

def foo():
  LOG.log("in foo")

然后:

  • 执行taskOne应该将“在任务1 \ nin foo中”发送到名为“taskOne.log”的文件中
  • 执行taskTwo应该将“在任务2 \ nin foo中”发送到名为“taskTwo.log”的文件中
  • 在芹菜任务之外执行foo不应该将日志发送到文件

我正在考虑建立一个处理程序,检查调用堆栈以查看它当前是否在celery任务的上下文中执行,如果是,则登录到文件。但是,我不确定解决方案是否具有高效性,或者是否实施了不良做法。

0 个答案:

没有答案