Python 协助芹菜采伐

Python 协助芹菜采伐,python,logging,celery,Python,Logging,Celery,芹菜是一个超级棒的图书馆,但它的日志部分的文档不是最好的,这让我来到这里请求帮助 截至目前,我的脚本也是如此(总结如下): tasks.py文件中的process函数是一个非常基本的函数,可以访问API和DBs获取一些信息,我希望能够将其记录到一个记录器(timber.io),该记录器连接到python日志库,是日志的在线存储 然而,我的主要问题是,原木被送到标准件,而不是木材原木。我看过芹菜。信号,但文档不是很好。我们将非常感谢您的帮助。谢谢。你能试试这个吗 import logging im

芹菜是一个超级棒的图书馆,但它的日志部分的文档不是最好的,这让我来到这里请求帮助

截至目前,我的脚本也是如此(总结如下):

tasks.py文件中的process函数是一个非常基本的函数,可以访问API和DBs获取一些信息,我希望能够将其记录到一个记录器(timber.io),该记录器连接到python日志库,是日志的在线存储

然而,我的主要问题是,原木被送到标准件,而不是木材原木。我看过芹菜。信号,但文档不是很好。我们将非常感谢您的帮助。谢谢。你能试试这个吗

import logging
import os
import sys
from celery import Celery
from celery.signals import after_setup_logger

app = Celery('app')
app.conf.update({
    'broker_url': 'filesystem://',
    'broker_transport_options': {
        'data_folder_in': './broker/out',
        'data_folder_out': './broker/out',
        'data_folder_processed': './broker/processed'
    },
    'result_persistent': False,
    'task_serializer': 'json',
    'result_serializer': 'json',
    'accept_content': ['json']})


logger = logging.getLogger(__name__)


for f in ['./broker/out', './broker/processed']:
    if not os.path.exists(f):
        os.makedirs(f)

@after_setup_logger.connect
def setup_loggers(logger, *args, **kwargs):
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

    # add filehandler
    fh = logging.FileHandler('logs.log')
    fh.setLevel(logging.DEBUG)
    fh.setFormatter(formatter)
    logger.addHandler(fh)


@app.task()
def add(x, y):
    logger.info('Found addition')
    logger.info('Added {0} and {1} to result, '.format(x,y))
    return x+y


if __name__ == '__main__':
    task = add.s(x=2, y=3).delay()
按如下方式启动工人:

celery worker --app=app.app --concurrency=1 --loglevel=INFO
并异步启动任务:

python app.py
我对其进行了更改,使其成为一个独立脚本,仅将文件系统用作消息代理(此外,我还特意将timber.io处理程序替换为filehandler)

这会将日志写入
logs.log
(将filehandler替换为timber.io处理程序,这将解决您的问题)

我经历了一段艰难的时光,因为我无法让它与
worker\u hijack\u root\u logger=False
setup\u logging
中定义的自定义记录器一起工作

然而,在重新查看文档后,我得出结论,不覆盖记录器是一个更好的选择,而只是增加它:

如果您想通过芹菜来增加日志配置设置 然后,您可以使用after_setup_logger和after_setup_task_logger 信号


另请参见:

当然,我有一个简短的问题。如何将该记录器传递给run_task()方法?您不需要这样做。你为你的任务所做的是:
从芹菜.utils.log导入get_task\u logger logger=get_task\u logger(\uuu name\uuu)
然后在你的任务中使用
logger
我只是写了些什么来测试,但我没有得到日志,我做了什么不正确的事情吗?此外,Timber.io是非常新的,可能不支持芹菜采伐者,这可能是一种可能的情况
python app.py