我正在尝试为基于Celery的应用程序配置一个记录器。控制台日志记录工作正常。但是,日志消息不会添加到我指定的日志文件:celery.log
中。
- 为什么日志消息没有写入日志文件
这是我的日志记录配置
# log_config.py
import sys
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'simple': {
'format': '%(levelname)s %(message)s',
'datefmt': '%y %b %d, %H:%M:%S',
},
},
'handlers': {
'console': {
'level': 'WARN',
'class': 'logging.StreamHandler',
'stream': sys.stdout,
'formatter': 'simple'
},
'celery': {
'level': 'WARN',
'class': 'logging.handlers.RotatingFileHandler',
'filename': '/tmp/celery.log',
'formatter': 'simple',
'backupCount': 5,
'maxBytes': 1024 * 1024 * 100, # 100 mb
},
},
'loggers': {
'celery': {
'handlers': ['celery', 'console'],
'propagate': True,
'level': 'WARN',
},
}
}
芹菜和日志初始化:
dictConfig(log_config.LOGGING)
app = Celery('app',
broker=env('CELERY_BROKER_URL', 'amqp://'),
backend=env('CELERY_BACKEND_URL', 'rpc://'),
include='tasks')
样本输出
[2016-05-04 12:32:45,077: WARNING/MainProcess] celery@computer1 ready.
[2016-05-04 12:32:47,503: WARNING/Worker-2] [INFO] Running plugin `one` with target `www.example.com`
[2016-05-04 12:32:47,508: WARNING/Worker-1] [INFO] Running plugin `two` with target `www.example.com`
[2016-05-04 12:32:47,559: WARNING/Worker-3] [INFO] Running plugin `three` with target `('127.0.0.1', 'example.com')`
[2016-05-04 12:32:47,559: WARNING/Worker-3] tasks.MySampleTask[31ffe71d-4645-47f2-1237-4c431282ac12]: it works!
PS:我不使用Django。
您可以使用CELERYD_HIJACK_ROOT_LOGGER
设置来使用自定义记录器。
app.conf.update(CELERYD_HIJACK_ROOT_LOGGER=False)
如果重新启动worker,它将生成一个芹菜日志文件。
你可以在芹菜文档中阅读更多关于这方面的内容。