由于项目需要日志文件的功能,又由于项目中有用到Celery模块,所以就看了看celery的用法,然后研究了一下如何在celery中记录日志。
如图:这是我的项目的目录,proj是项目名,celery.py文件是celery的一些基本配置,比如你要使用的中间件是什么,用的是哪台电脑的中间件。
比如我是用的redis,连接的是本地的服务器。
from __future__ import absolute_import, unicode_literals
from celery import Celery
app = Celery('proj',
broker='redis://localhost',
backend='redis://localhost',
include=['proj.tasks'])
# Optional configuration, see the application user guide.
app.conf.update(
result_expires=3600,
)
if __name__ == '__main__':
app.start()
tasks.py文件就是要执行的任务
from __future__ import absolute_import, unicode_literals
from .celery import app
from celery.utils.log import get_task_logger
from proj import config
logger = get_task_logger('myapp')
@app.task
def add(x, y):
logger.info("1111111")
return x + y
@app.task
def mul(x, y):
return x * y
@app.task
def xsum(numbers):
return sum(numbers)
config.py文件就是有关日志的配置了,不懂得可以去看看这篇文章 https://blog.csdn.net/qq_27437781/article/details/81564813
具体得配置如下:
import logging.config
LOG_CONFIG = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'simple': {
# 'datefmt': '%m-%d-%Y %H:%M:%S'
'format': '%(asctime)s \"%(pathname)s:%(module)s:%(funcName)s:%(lineno)d\" [%(levelname)s]- %(message)s'
}
},
'handlers': {
'celery': {
# 'level': 'INFO',
# 'class': 'logging.handlers.RotatingFileHandler',
'level': 'DEBUG',
'formatter': 'simple',
'class': 'logging.handlers.TimedRotatingFileHandler',
'filename': 'your_name.log',
'when': 'midnight',
'encoding': 'utf-8',
},
},
'loggers': {
'myapp': {
'handlers': ['celery'],
'level': 'INFO',
'propagate': True,
}
}
}
logging.config.dictConfig(LOG_CONFIG)
然后就可以在tasks中通过 logger = get_task_logger('myapp')来获取日志记录器logger,再通过logger.info(message)往文件记录日志。