我对此感到困惑,并且没有一种“最佳”方法可以做到这一点。记住几件事很重要。
- Celery 作为单独的可执行文件在生产环境中运行。这似乎很明显,但这意味着与其他东西(如 django)共享日志文件不会很好地工作(参见CELERYD_HIJACK_ROOT_LOGGER)所以不要这样做..
- 在生产环境和开发环境中保持以相似的方式运行非常重要,因此当您转向生产环境时,事情不会出错(请参阅CELERY_ALWAYS_EAGER并使用它)
- 如果您使用设置,从 manage.py 运行 Celery 将引用您的
settings.py
文件进行配置
考虑到这一点,我建议您设置日志记录以满足您的需求。首先确保您正确设置了模块的日志记录级别。有关如何设置日志记录,请参阅我的另一篇文章。这是满足您需求的精简版
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'standard': {
'format': "[%(asctime)s] %(levelname)s [%(name)s.%(funcName)s:%(lineno)d] %(message)s",
'datefmt': "%d/%b/%Y %H:%M:%S"
},
},
'handlers': {
'console': {
'level': 'DEBUG',
'()': 'logutils.colorize.ColorizingStreamHandler',
'formatter': 'standard',
'stream': sys.stdout
},
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
'include_html': True,
},
},
'loggers': {
'django': {
'handlers': ['mail_admins'],
'propagate': True,
'level': 'ERROR',
},
'mymodule': {
'handlers': ['console', 'mail_admins'],
'propagate': True,
'level': 'DEBUG'
},
}
}
然后像这样运行它。
./manage.py celeryd --event --beat --settings=dev
这样做是设置两个不同的处理程序。第一个是控制台处理程序,它报告任何 DEBUG 及以上内容。第二个是只查看 ERRORS 及以上的邮件处理程序。接下来是记录器报告的内容。所有 django.* 记录器都会被报告给任何 ERROR 级别的处理程序(mail_admins)。我们的任何模块都可以将 DEBUG 及更高版本推送到两者。
我想这就是你所追求的。