Celery的日志配置及日志按天切分

一. Celery定时任务启动

  1. Celery定时任务的启动是通过命令启动的,可以通过-f logfilename或–logfile=logfilename指定日志保存的文件名,可以通过-loglevel=level 指定日志的等级(info,warning,error,critical…)
  2. 如果不指定日志文件,则celery会根据进程自动在项目启动的目录下自动生成日志文件,这是celery的默认日志文件
    如:work.log,work-1.log,work-2.log

二. celery日志配置

  1. python进行日志管理的模块为logging,celery的日志也是用logging实现的,如果我们要将需要的内容写到日志文件中,也是使用logging实现,代码目录结构
# 目录结构
- celery_crontab- config.py- main.py- tasks.py
  1. 同时,为了实现celery的日志按天切分,需要使用logging模块及logging.handlers中的TimedRotatingFileHandler来设置日志切分的相关配置,在celery定时任务的config.py中设置日志相关配置
from celery import Celery
from kombu import Exchange, Queue
import logging
from logging.handlers import TimedRotatingFileHandler# celery
app = Celery('demo', broker='amqp://guest@localhost:5672//')
# Queue
queue = (# 定义专用的queue,定义Exchange,以及与route对应的keyQueue('queue_demo', Exchange('exchange_demo', type='direct'),routing_key='queue_demo_key'),
)
# Route
route = {# 定义任务crontab_func1的queue,routing_key'tasks.crontab_func1': {'queue': 'queue_demo', 'routing_key': 'queue_demo_key'},'tasks.crontab_func2': {'queue': 'queue_demo', 'routing_key': 'queue_demo_key'},
}# 指定queue和route的配置应用到celery定时任务的配置中,设置时区
app.conf.update(CELERY_QUEUES=queue, CELERY_ROUTES=route, CELERY_TIMEZONE='Asia/Shanghai', CELERY_ENABLE_UTC=False)class Config(object):# 设置日志log_fmt = '%(asctime)s\tFile \"%(filename)s\",line %(lineno)s\t%(levelname)s: %(message)s'# log_file_handler = TimedRotatingFileHandler(filename="log", when="MIDNIGHT", interval=1, backupCount=30)log_file_handler = TimedRotatingFileHandler(filename="log", when="M", interval=1, backupCount=7)formatter = logging.Formatter(log_fmt)log_file_handler.setFormatter(formatter)logging.basicConfig(format=log_fmt)LOGGER = logging.getLogger()LOGGER.setLevel(logging.INFO)LOGGER.addHandler(log_file_handler)
  1. 在tasks.py的任务函数中设置自己需要的日志内容
from config import app, Configconfig_obj = Config()@app.task
def crontab_func1():print('在此编写任务要实现的代码')config_obj.LOGGER.info('coding something')@app.task
def crontab_func2():print('在此调用实现了定时任务功能的函数或方法')config_obj.LOGGER.info('coding something again')
  1. 在main.py中实现定时任务
from celery.schedules import crontabfrom tasks import *app.conf.update(CELERYBEAT_SCHEDULE={"crontab_func1": {'task': 'tasks.crontab_func1','schedule': crontab(minute='*/1'),'args': ()},"crontab_func2": {'task': 'tasks.crontab_func2','schedule': crontab(minute='*/1'),'args': ()},},
)

三、通过外部配置实现celery日志切分

  1. 设置好以上相关配置后,在main.py所在目录启动定时任务,发现日志写入到了文件中,但是并没有按我们想要的结果进行切分(直接在配置中使用日志,直接调用任务函数都可以实现切分,但是使用命令启动定时任务后不能完成切分)
# 启动命令
celery multi start demo_work -A main -Q queue_demo -l info -B --logfile=crontablog.log

原因是celery并没有帮我们实现切分日志的功能,以上TimedRotatingFileHandler的配置没有生效

  1. 所以要实日志切分,需要使用其他方法,将以上config.py中的TimedRotatingFileHandler设置生效
  2. 在/etc/logrotate.d/目录下创建日志外部切分的配置文件celery,通过外部方式对日志文件进行切分
# 指定被切分的日志文件所在的路径(即定时任务指定的日志的绝对路径)
/root/celery_logging/*.log{# 按小时切分,也可以换成自己需要的,如:daily按天hourlymissingok# 保存的日志文件数量rotate 7compressdelaycompressnotifempty# 设置切分日志copytruncate
}
  1. 在celery定时任务的main.py所在目录执行启动命令重新启动定时任务,如果不指定日志文件,会在当前目录下生成默认日志文件如work.log,work-1.log,work-2.log
# 启动命令
celery multi start demo_work -A main -Q queue_demo -l info -B --logfile=crontablog.log
  1. 执行命令/usr/sbin/logrotate -f /etc/logrotate.conf,使刚才编写的配置文件/etc/logrotate.d/celery生效,此时即完成日志切分了,并且后续会按照设置的周期进行切分,按设置的数量保留日志文件的个数
    注意:以上命令需要使用root权限执行,redhat或centos上使用su并输入密码切换到root,ubuntu上在命令前加上sudo并输入密码用root权限执行

Celery的日志配置及日志按天切分相关推荐

  1. Nginx 日志配置、日志切割

    Nginx 日志配置.日志切割 设置 access.log 语法 log_format自定义格式 设置error_log 语法 日志切割 前置文章:Nginx 的配置文件 nginx.conf Ngi ...

  2. Linux日志管理(日志配置、日志轮替)

    Linux日志管理   对运维人员来说,无论管理什么系统,对日志文件的监控.调用.管理都是其中重要的一部分.服务器问题的解决都是从查看系统(错误)日志开始的.本篇文章,我们就来了解一下Linux系统中 ...

  3. Nginx 日志配置、日志切割、日志切割脚本

    文章目录 前言 一.access_log 1.语法 2.基本用法 3.作用域 4.log_format 自定义日志格式 二.error_log 1.语法 2.基本用法 3.作用域 4.rewrite_ ...

  4. SpringBoot ——Spring Boot日志配置

    Spring Boot 采用了 slf4j+logback 的组合形式,Spring Boot也提供对JUL.log4j2.Logback提供了默认配置 1.默认日志配置 修改日志默认级别 2.修改日 ...

  5. 自定义配置log日志

    目录 springboot自带的日志 配置新日志文件 1.新建日志配置文件 2.编写配置文件内容 3.编写自定义log日志--文件打印 修改官方提供的日志格式 1.这里需要使用到 @Slf4j 2.需 ...

  6. SLF4j的介绍与使用+SpringBoot日志配置

    关于日志 日志级别 error > warn > info > debug > trace > fatal trace:级别最低 debug:需要调试时候的关键信息 in ...

  7. Nginx日志配置、错误界面配置、流量控制 第九天

    目录 nginx日志配置 nginx日志介绍 access.log error.log open_log_file_cache rewrite.log nginx的日志轮转 nginx错误界面配置 n ...

  8. springboot默认日志配置及程序启动脚本

    前言 今天来介绍下Spring Boot如何配置日志logback,我刚学习的时候,是带着下面几个问题来查资料的,你呢 如何引入日志? 日志输出格式以及输出方式如何配置? 代码中如何使用? 正文 Sp ...

  9. SpringBoot打印日志配置,打印出默认控制台一样的日志格式。

    1.问题描述 如何打印出和SpringBoot默认日志格式一样的日志?根据网上的日志配置,日志是打印出来了没问题.但效果是这样的.

最新文章

  1. 【剑指offer】顺时针打印矩阵
  2. 成功解决ValueError: Input contains NaN, infinity or a value too large for dtype('float64').
  3. java策略模式 if else_Java如何利用策略模式替代if/else语句
  4. 几何画板度量三角形的步骤
  5. 三维重建13:点云的局部特征总结
  6. ABAP Modification browser SE95
  7. codeforces Cable Connection
  8. Express中use挂载中间件的方法
  9. jmx监控java进程_用VisualVM远程监控Java进程
  10. Eclipse启动Web项目 Tomcat中webapps中没有项目文件夹
  11. Python基础篇:某宝一键秒杀,毫秒级的精准度
  12. Ubuntu 14.04 安装xvid编码器
  13. python贪吃蛇源码下载_Python贪吃蛇源代码
  14. 样点自适应补偿(SAO)技术
  15. ghost错误代码大全
  16. Video.js使用教程一(详解)
  17. 2021-04-30
  18. 企业微信信息服务器保存,企业微信接入
  19. 记一次疑难杂症-HTTP请求RST
  20. 都这样了!我还是没法关闭微信朋友圈广告

热门文章

  1. 同步和异步概念(由DZW前端框架引发的百度地图api无法加载问题总结)
  2. Lync开发实例3—自定义客户端
  3. 转载自《读者》--您也吻我一下好吗
  4. Docker 安装 MongoDB
  5. 容器编排技术 -- Kubernetes kubectl rollout pause 命令详解
  6. MiniO 磁盘缓存快速入门
  7. Linux内核参数(如kernel.shmmax)及Oracle相关参数调整(如SGA_MAX_SIZE)
  8. kafka2.3.1+zookeeper3.5.6+kafka-manager2.0.0.2集群部署(centos7.7)
  9. 【Linux 命令】云服务器 ECS (CentOS) 开启防火墙操作
  10. js designMode contentEditable 编辑在线网页