【发布时间】:2016-08-30 22:22:03
【问题描述】:
=========================最后更新===================== ====
我找到了 Celery Signal worker_process_init.connect(some_function)
这允许我在工人 child 开始运行之前运行我想要的任何功能,在我的情况下,我可以根据需要更改日志处理程序...
handler = logging.FileHandler(('my%s.log')%current_process().index, 'a')
logger.addHandler(handler)
(我发现的另一个信号 - setup_log 在我的情况下效率不高。)
++++++++++++++++++++++++++++
更新 ++++++++++++++++++++++++++++
我将句柄从我的 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 任务,
我希望每个 celery worker 写入不同的日志文件,
但每次都是同一个-->
例如: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 的答案,但它对我不起作用..
谢谢
【问题讨论】:
标签: python django runtime celery