【问题标题】:Python Celery - How to separate log filesPython Celery - 如何分隔日志文件
【发布时间】: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 方法时,日志不会存储在任何地方。

【问题讨论】:

    标签: python celery


    【解决方案1】:

    您必须先禁用 celery 日志记录。你可以通过设置来做到这一点

     CELERYD_HIJACK_ROOT_LOGGER = False 
    

    在您的配置中,或者您可以使用Celery signals

    现在,如果您运行您的工人,您将看不到任何信息。

    让我们编写一个简单的记录器,将内容记录到单独的文件中

    def custom_logger(name):
        logger = logging.getLogger(name)
        logger.setLevel(logging.DEBUG)
        handler = logging.FileHandler(os.path.join('/tmp/', name + '.log'), 'w')
        logger.addHandler(handler)
        return logger
    
    
    @app.task()
    def add(x, y):
    
        task_id = add.request.id
        l = custom_logger(task_id)
        l.info("Testing Log")
    
        return x + y
    

    对于每个任务,这都会创建一个以任务 ID 作为名称的新文件,并记录您想要的任何内容。

    【讨论】:

    猜你喜欢
    • 2018-02-26
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 2021-03-29
    • 2020-08-08
    • 1970-01-01
    相关资源
    最近更新 更多