我想知道如何设置更具体的日志系统.我的所有任务都使用
logger = logging.getLogger(__name__)
Run Code Online (Sandbox Code Playgroud)
作为模块范围的记录器.
我希望celery登录到"celeryd.log"并将我的任务记录到"tasks.log",但我不知道如何让它工作.使用CELERYD_LOG_FILE来自django-celery我可以将所有与celeryd相关的日志消息路由到celeryd.log,但是没有在我的任务中创建的日志消息的跟踪.
我正在使用以下命令:
芹菜工人-l info -A django_app --concurrency = 10 --autoreload
但DEBUG日志仍在倾泻,同样适用于使用-l warning和--logfile

知道为什么Celery会忽略日志设置吗?
更多详情:
日志来自Python库suds,使用DEBUG输出到记录器.
我一直试图弄清楚python记录器和芹菜记录器之间的区别,特别是下面命令之间的区别,但找不到一个好的答案.
我正在使用芹菜v3,django 1.10.
from celery.utils.log import get_task_logger
logger = get_logger(__name__)
...
from celery.utils.log import get_task_logger
logger = get_task_logger(__name__)
...
import logging
logger = logging.get_logger(__name__)
Run Code Online (Sandbox Code Playgroud)
芹菜文档(最新版本,v3.1)在这个主题上非常缺乏.我已经看过了诸如类似的问题这一个,但它仍然是它不清楚使用哪个,为什么要使用那一个,然后将区别具体是什么.我正在寻找一个清晰,简洁的答案.
我也在我的生产环境中使用哨兵.这种选择如何影响您的哨兵日志?即这些常见的设置
使用 Django 1.8,我想在视图中保存表单后触发延迟的 celery 函数
def new_topic(request, forum_id):
form = TopicForm()
uid = request.user.id
if request.method == 'POST':
tform = TopicForm(request.POST)
if tform.is_valid():
topic = tform.save(commit=False)
topic.title = clean_title(tform.cleaned_data['title'])
topic.description = clean_desc(tform.cleaned_data['description'])
topic.save()
notify_new_topic.delay( uid, topic) #<--problem here
#rest of the views
Run Code Online (Sandbox Code Playgroud)
但我得到
EncodeError at /add/topic/
<Topic: Topic object> is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
如果我delay从 celery 任务中删除,我不会收到任何错误。
任务是:
@shared_task
def notify_new_topic(flwd_id, topic):
title = topic.title
link = topic.slug
flwd= cached_user(flwd_id) #User.objects.get(id = flwd_id)
print 'flwd is', flwd.username
flwr_ids …Run Code Online (Sandbox Code Playgroud) 我通过supervisord开始芹菜,请参阅下面的条目.
[program:celery]
user = foobar
autostart = true
autorestart = true
directory = /opt/src/slicephone/cloud
command = /opt/virtenvs/django_slice/bin/celery beat --app=cloud -l DEBUG -s /home/foobar/run/celerybeat-schedule --pidfile=/home/foobar/run/celerybeat.pid
priority = 100
stdout_logfile_backups = 0
stderr_logfile_backups = 0
stdout_logfile_maxbytes = 10MB
stderr_logfile_maxbytes = 10MB
stdout_logfile = /opt/logs/celery.stdout.log
stderr_logfile = /opt/logs/celery.stderr.log
Run Code Online (Sandbox Code Playgroud)
pip冻结| grep芹菜
celery==3.1.0
Run Code Online (Sandbox Code Playgroud)
但任何用法:
@celery.task
def test_rabbit_running():
import logging
from celery.utils.log import get_task_logger
logger = get_task_logger(__name__)
logger.setLevel(logging.DEBUG)
logger.info("foobar")
Run Code Online (Sandbox Code Playgroud)
没有出现在日志中.相反,我得到如下条目.
celery.stdout.log
celery beat v3.1.0 (Cipater) is starting.
__ - ... __ - _
Configuration ->
. …Run Code Online (Sandbox Code Playgroud) 我有正在运行的 Celery 3.1 应用程序,它记录了一些敏感信息。理想情况下,我希望有相同的日志,但没有结果部分。
目前它看起来像:
worker_1 | [2019-12-10 13:46:40,052: INFO/MainProcess] Task xxxxx succeeded in 13.19569299298746s: yyyyyyy
Run Code Online (Sandbox Code Playgroud)
我想拥有:
worker_1 | [2019-12-10 13:46:40,052: INFO/MainProcess] Task xxxxx succeeded in 13.19569299298746s
Run Code Online (Sandbox Code Playgroud)
怎么做?
编辑:看来这可以完成这项工作:https://docs.celeryproject.org/en/3.1/reference/celery.worker.job.html#celery.worker.job.Request.success_msg但我不知道如何来实际使用它。