You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 13:04:32