Celery任务运行时Python TimedRotatingFileHandler无法按时轮转日志的解决咨询
Celery任务运行时Python TimedRotatingFileHandler无法按时轮转日志的解决咨询
各位好,我遇到了一个日志轮转的问题,想请教下大家怎么解决。
先说明下我的运行环境:
- Python 3.12.3
- Celery 5.3.6
- Django 4.2.11
- Ubuntu 22.04.4
我在Ubuntu服务器上同时部署了Django和Celery服务,日志处理用了DiscordHandler,还自定义了一个TimedRotatingFileHandler来调整轮转后的日志文件名格式,代码如下:
class CustomizedTimedRotatingFileHandler(TimedRotatingFileHandler): ''' log_name.date.log.log -> log_name.date.log ''' def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.namer = lambda name: name.replace(".log", "") + ".log"
项目的日志配置写在Django的settings文件里,具体配置是这样的:
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { **{ f"{k}_file": { "level": "INFO", "class": "api.logging.CustomizedTimedRotatingFileHandler", "filename": "log/sync.log", "when": "midnight", "backupCount": 2, "formatter": v, } for k, v in {"django": "verbose", "celery": "celery"}.items() } }, 'loggers': { 'django': { 'handlers': ['django_file'], 'level': 'INFO', 'propagate': True, }, 'django.server': { 'handlers': ['django_file'], 'level': 'INFO', 'propagate': False, }, 'celery': { 'handlers': ['celery_file'], 'level': 'INFO', 'propagate': False, } } }
现在遇到的问题是:目前生成了2个历史日志文件,还有一个当天的日志文件,但只有Django的日志会写入当天的新文件,Celery的日志完全没进去。我查了Discord的日志记录,发现每次午夜日志轮转出问题的时候,都有Celery任务在运行,而且这种情况已经出现好几次了——只要午夜有正在执行的Celery任务,日志轮转就会中断。
我自己的猜测是,是不是需要手动调用doRollover方法?比如写个Celery任务来定时执行这个操作?但不确定这样做是否正确,也不知道有没有更合适的解决方案。
有没有朋友遇到过类似的问题,或者能给我一些建议?非常感谢!
备注:内容来源于stack exchange,提问作者whatserface
相关产品推荐
相关产品推荐

