Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 芹菜4.0.2不';t登录到该文件_Python_Django_Logging_Celery - Fatal编程技术网

Python 芹菜4.0.2不';t登录到该文件

Python 芹菜4.0.2不';t登录到该文件,python,django,logging,celery,Python,Django,Logging,Celery,我在Django项目中使用芹菜(芹菜==4.0.2)。问题是我无法让芹菜登录到该文件。我什么都试过了。唯一有效的方法是在命令中指定文件: celery worker -A realestate_scanner -l info --purge --logfile=logs/celery.log 但问题是日志可能变得非常巨大,所以我需要指定旋转日志,我想在生产中运行worker和beat作为一名执事 地产扫描仪/地产扫描仪/芹菜.py from __future__ import absolute

我在Django项目中使用芹菜(芹菜==4.0.2)。问题是我无法让芹菜登录到该文件。我什么都试过了。唯一有效的方法是在命令中指定文件:

celery worker -A realestate_scanner -l info --purge --logfile=logs/celery.log
但问题是日志可能变得非常巨大,所以我需要指定旋转日志,我想在生产中运行worker和beat作为一名执事

地产扫描仪/地产扫描仪/芹菜.py

from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'realestate_scanner.settings')
app = Celery('realestate_scanner')


app.config_from_object('django.conf:settings',)
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
realstate\u scanner/realstate\u scanner/settings.py

你有什么建议吗

编辑:

根据lapinkoira的回答,我已将此信号添加到
芹菜.py
文件中:

from __future__ import absolute_import
import os

import logging
from celery import Celery
from django.conf import settings

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'realestate_scanner.settings')
app = Celery('realestate_scanner')


app.config_from_object('django.conf:settings',)
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

import celery.signals

@celery.signals.setup_logging.connect
def on_celery_setup_logging(**kwargs):
    logger = logging.getLogger('realestate_scanner.realestate_scanner.celery')
    if not logger.handlers:
        handler = logging.FileHandler('celery_test_log.log')
        formatter = logging.Formatter(logging.BASIC_FORMAT)  # you may want to customize this.
        handler.setFormatter(formatter)
        logger.addHandler(handler)
        logger.propagate = False
信号可能起作用,因为创建了
celery\u test\u log.log
文件,但输出再次进入celery控制台


我可能没有得到我需要的记录器,但不知道如何得到它。

mmm看起来像芹菜dev说芹菜仍然会配置它自己的记录器,并忽略其他配置,即使您禁用劫持根记录器

他建议使用芹菜记录信号:

来源


我找不到完整的答案,所以这是我的

Django
日志记录
设置:

LOGGING = {
    ...
    'handlers': {
        'celery.file': {
            'level': 'INFO',
            'class': 'logging.FileHandler',
            'filename': "path/to/celery.log",
        },
    },
    'loggers': {
        'celery': {
            'handlers': ['celery.file'],
            'level': 'INFO',
        },
    },
}
我必须给记录器命名
芹菜
,才能让它工作。像myapp.芹菜这样的名字不起作用

在芹菜.py中:

import logging
import celery

...

@celery.signals.setup_logging.connect  
def setup_celery_logging(**kwargs):  
    return logging.getLogger('celery')  
如果您想在出现错误时向管理员发送电子邮件之类的操作,只需像平常一样添加处理程序

LOGGING = {
    ...
    'loggers': {
        'celery': {
            'handlers': ['celery.file', 'mail_admins'],
            'level': 'INFO',
        },
    },
}

你有哪一个芹菜版本?@lapinkoira芹菜==4.0.2Ah我没有看到你已经发布了上面的版本,你是否与主管对工作人员进行了后台监控?目前还没有,它在我个人的Ubuntu上,但我想在VPS上部署它,所以我会对它进行后台监控,我希望今天:)我理解信号,但我不知道在函数内部应该做什么。如何在那里设置日志记录?谢谢,你必须在信号内部调用你的记录器处理程序,就像在这个回答中,我检查了它并试图创建信号。但我不知道如何找到正确的记录器。我已经在问题的底部添加了我的代码。这很奇怪,但在这样做之后,settings.py日志开始工作。它甚至在移除信号后仍能工作。@MilanoSlesarik-嗨,你最后是如何使它工作的?
import logging
import celery

...

@celery.signals.setup_logging.connect  
def setup_celery_logging(**kwargs):  
    return logging.getLogger('celery')  
LOGGING = {
    ...
    'loggers': {
        'celery': {
            'handlers': ['celery.file', 'mail_admins'],
            'level': 'INFO',
        },
    },
}