【发布时间】:2015-04-18 04:36:39
【问题描述】:
默认情况下,python celery 包会集中日志。 在我的设计规范中,我希望将每个工作人员的日志写入一个单独的文件,其中文件名将匹配发送给任务的唯一 ID。 集中式日志显示日志来自哪个工作人员,但我不知道如何将 id 映射到工作人员编号。
为了分散日志,我尝试了:
import logging
CELERYD_HIJACK_ROOT_LOGGER = False
app = Celery()
@app.task
def my_task(id):
logging.basicConfig(filename='/tmp/%i.log' % id)
my_package.do_somthing()
logging.info('hi')
但这不会创建任何日志文件。 有没有办法分离日志或将工人编号映射到 id 以便我可以生成单独的日志?
更新:
阅读http://docs.celeryproject.org/en/latest/userguide/tasks.html#names 我尝试了这种仍然无法生成单独日志的方法:
celeryconfig.py:
CELERYD_HIJACK_ROOT_LOGGER = 假
main.py
import logging
app = Celery()
app.config_from_object('celeryconfig')
@app.task(bind=True)
def my_task(self, id):
self.request.logfile = '/tmp/%i.log' % id
my_package.do_somthing()
logging.info('hi')
另外,我发现了一个博客:http://echorand.me/2012/08/14/celery-and-python-logging/ 并尝试了。它只会将日志消息“hi”写入单独的文件,但会继续从
发送日志my_package.do_somthing()
到标准输出意味着记录器不是全局固定的,并且在记录器周围传递会变得非常混乱,所以不会这样做。
更新
我尝试了博客中的代码: https://github.com/kouroshparsa/celery_separate_logging/tree/master/celery_example
调用 mylib/fire.py:burn 方法时,日志不会存储在任何地方。
【问题讨论】: