运行 时间的 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
======================== 最后更新 =================== ======
我找到了 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