Django Celery在运行时更改日志文件

时间:2016-05-05 07:54:44

标签: python django runtime celery

最后更新===================== ====
我发现芹菜信号 worker_process_init.connect(some_function) 允许我在工作人员孩子开始运行之前运行我想要的任何功能,在我的情况下,我可以根据需要更改日志处理程序...

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上运行Celery任务,

我希望每个芹菜工作者都写一个不同的日志文件,

但每次都是同一个 - >

例如:worker 1 - > myLog1.log,worker 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回答,但它对我不起作用..

感谢

1 个答案:

答案 0 :(得分:0)

您知道在运行worker时可以通过以下参数指定日志文件:

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

有关official doc

的更多信息