django - 无法让 celery 以与 Django 相同的方式进行 INFO 日志记录

标签 django celery

我的日志记录配置如下:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'mail_admins': {
            'level': 'INFO',
            'class': 'common.handlers.SuperAdminEmailHandler'
            },
        'console': {
            'level': 'INFO',
            'class': 'logging.StreamHandler'
            }
        },
    'loggers': {
        '': {
            'handlers': ['console'],
            'level': 'INFO',
            'propagate': True,
        },
        'django.request': {
            'handlers': ['console'],
            'level': 'ERROR',
            'propagate': True,
            },
        },
    }

这是 CELERYD_HIJACK_ROOT_LOGGER = False。我也有这个任务:

@periodic_task(run_every=crontab())
def test_logging():
    import logging
    print('running test_logging')
    logging.info("Here's an info message", extra = {
        'tell_admins': True, 'email_content': 'Additional content'
    })
    logging.error("Here's an error message")

我有一个直接调用 test_logging 的测试 URL。当我点击那个 URL 时,我看到了这个输出:

running test_logging
Here's an info message
Here's an error message
[05/Jul/2013 11:07:27] "GET /test/ HTTP/1.1" 200 7

正是我所期望的。当同样的功能通过 celery 运行时,我得到:

Scheduler: Sending due task scheduler.tasks.test_logging (scheduler.tasks.test_logging)
running test_logging
Here's an error message

信息消息去哪儿了?!我尝试添加另一个 celery 特定的记录器:

    'celery': {
        'handlers': ['console'],
        'level': 'INFO',
        'propagate': True,
        },

现在我从 celery 中看到了这个:

running test_logging
running test_logging
Here's an error message
Task scheduler.tasks.test_logging[271b8a4a-0c04-4391-81c5-5b009d70b08d] succeeded in 0.00929498672485s: None

仍然没有信息消息。关于为什么以及如何取回它的任何想法?

最佳答案

出于某种原因,即使 Celery 使用您在 Django 的日志记录设置中指定的 then 处理程序,它仍然会覆盖记录器的级别。我现在正在使用此功能来获取记录器。将记录器设置为适当的级别后,一切似乎都按预期工作。

import logging

from celery.utils.log import get_task_logger

def get_celery_logger(name):
    logger = get_task_logger(name)
    logger.level = logging.INFO
    return logger

关于django - 无法让 celery 以与 Django 相同的方式进行 INFO 日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17492211/

相关文章:

django - 在 Django 现有用户模型中添加 uuid 字段?

python - Django 模型表单未正确提交

python - 如何实现每个工作线程同步以避免与 Celery 上的信号连接的方法出现竞争条件?

rabbitmq - Celery与Rabbitmq创建结果多个队列

python - 为 Celery 和 Django 启用 Beat 时出现 TypeError

python - django-rest-framework 教程 4(身份验证和权限)问题

基于 Django 类的 View - 过滤查询集并保存它

python - Django FileField with upload_to 在运行时确定

pylons - 将 Celery 与 Pylon 结合使用

python - 如果参数和任务名称已经在服务器中排队,是否可以跳过委派 celery 任务?