运行 时间的 Django Celery 更改日志文件

Django Celery change log file on run time

======================== 最后更新 =================== ======
我找到了 Celery Signal worker_process_init.connect(some_function)
这允许我在工作人员 child 开始 运行ning 之前 运行 我想要的任何功能,在我的情况下,我可以更改日志处理程序如我所愿...

handler = logging.FileHandler(('my%s.log')%current_process().index, 'a')
logger.addHandler(handler)

(我发现的另一个信号 - setup_log 在我的案例中效率不高。)
++++++++++++++++++++++++++ 更新++++++++++++++++++++++++++++
我将 handlet 从我的 settings.py 中移出,因为我知道它只加载了一次,所以现在它在 task.py:

中定义
def custom_logger(name):
    logger = logging.getLogger(name)
    logger.setLevel(logging.DEBUG)
    handler = logging.FileHandler(('my%s.log')%current_process().index, 'a')
    logger.addHandler(handler)
return logger

和任务例如:

@tenant_celery.task(base=HandlersImplTenantTask)
@concurrent_task(task_timeout=1)
def add():
    task_id = add.request.id
    l = custom_logger(task_id)
    l.info("task name is -   ADD")
    l.info("my worker id is: %s" % current_process().index)
return 5+7

不是最美观的解决方案,但它确实有效- 在 运行 时间更改日志文件..

============================================= =================

我在 Django 上 运行ning Celery 任务,

我希望每个 celery worker 写入不同的日志文件,

但是每次都是一样的-->

例如:工人 1 -->myLog1.log,工人 2 -->myLog2.log

这是我的 settings.py 的样子:

logfile = '%s/%s' % (logdir, APP_NAME + "-" + process_name + '.log')
CELERY_WORKER_LOGFILE = '%s/%s' % (logdir, 'celery_worker.log')

和task.py:

@tenant_celery.task(base=HandlersImplTenantTask)
def get_worker_id():
    logdir = '%s/%s' % (os.curdir, 'log')
    settings.CELERY_WORKER_LOGFILE = '%s/%s-%s.log' % (logdir, 'celery_worker', current_process().index)
    print settings.CELERY_WORKER_LOGFILE
    # print the new log file
    logger.info("HELLO FROM TASK %s", current_process().index)
    #  write to the wrong logfile.

我的第二个任务也是如此。

但是虽然它打印不同的 "LOFFILE" 每个任务,

它一直写入同一个日志 (!!),因为它出现在 settings.py 中。

我的 运行 命令是:

celery worker -c 2 --broker=amqp://1000:1000@localhost:5672//1000

有什么方法可以(真正地)在 运行 时间内更改日志文件吗??

(我无法理解Django log signals是否可以帮助我)

我也找到了 THIS 答案,但它对我不起作用..

谢谢

你知道,当 运行 工作人员时,你可以通过如下参数指定日志文件:

celery -A proj worker -l info -f paht/to/yourfile.log

更多关于 official doc