如何让TimedRotatingFileHandler在每月第一天执行日志轮转?
如何让TimedRotatingFileHandler在每月第一天执行日志轮转?
我懂你的困扰——Python自带的TimedRotatingFileHandler最多只支持到每周级别的日志轮转(比如用W0表示周日到周一的时间节点切换),没法直接实现“每月第一天自动轮转日志”的需求。
我之前琢磨出一个思路:基于午夜轮转的基础配置,通过自定义namer函数来做条件式重命名——只有当当天是每月第一天时,才把前一天的日志文件重命名为带年月的归档格式;其他日子里,即使触发了午夜轮转,也让文件保持原名称(相当于不生成新的归档文件)。具体实现代码如下:
import datetime as dt import logging from logging.handlers import TimedRotatingFileHandler logger = logging.getLogger("process") handler = TimedRotatingFileHandler("process.log", when="midnight") handler.namer = lambda _: (dt.datetime.now() - dt.timedelta(days=1)).strftime("%Y%m_process.log") if dt.datetime.now().day == 1 else "process.log" logger.addHandler(handler)
备注:内容来源于stack exchange,提问作者not_real_moderator
相关产品推荐
相关产品推荐

