我的日志记录配置如下:
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时,我看到了这个输出:
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
正是我所期待的。当相同的功能通过芹菜时,我得到:
Scheduler: Sending due task scheduler.tasks.test_logging (scheduler.tasks.test_logging)
running test_logging
Here's an error message
信息消息在哪里?!我尝试添加另一个特定于芹菜的记录器:
'celery': {
'handlers': ['console'],
'level': 'INFO',
'propagate': True,
},
现在我从芹菜中看到了这个:
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
仍然没有信息消息。关于为什么以及如何取回它的任何想法?
答案 0 :(得分:3)
出于某种原因,即使Celery正在使用您在Django的日志记录设置中指定的处理程序,它仍然会覆盖记录器的级别。我现在正在使用此功能来获取记录器。将记录器设置为适当的级别后,事情似乎按预期工作。
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
答案 1 :(得分:1)
首先,如果您使用django-celery
,可以尝试运行:
./ manage.py celeryd --loglevel = info
其次,如果你使用Celery> = 3.0,你必须得到logger对象:
from celery.utils.log import get_task_logger logger = get_task_logger(__name__) # and inside your function use # logger instead logging @periodic_task(run_every=crontab()) def test_logging(): print('running test_logging') logger.info("Here's an info message", extra = { 'tell_admins': True, 'email_content': 'Additional content' }) logger.error("Here's an error message")
如果不起作用,您也可以尝试change LOGGIN object