Python TimedRotatingFileHandler 修改suffix后无法自动删除文件

TimedRotatingFileHandler 用法

“S”: Seconds
“M”: Minutes
“H”: Hours
“D”: Days
“W”: Week day (0=Monday)
“midnight”: Roll over at midnight

设计1s一个日志,超过3个删除

 log = logging.getLogger()log.setLevel(logging.ERROR)  # 日志等级为ERRORfh = logging.handlers.TimedRotatingFileHandler("log", when='S', interval=1, backupCount=3)fh.suffix = "%Y-%m-%d_%H-%M-%S.log"formatter = logging.Formatter('[%(asctime)s] - %(filename)s [Line:%(lineno)d] - [%(levelname)s]-[thread:%(thread)s]-[process:%(process)s] - %(message)s') fh.setFormatter(formatter)log.addHandler(fh)i = 0while i < 100000000:sleep(0.1)log.error("记录" + str(i))i = i + 1

结果是并不会删除

查看TimedRotatingFileHandler的源码

def __init__(self, filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False):BaseRotatingHandler.__init__(self, filename, 'a', encoding, delay)self.when = when.upper()self.backupCount = backupCountself.utc = utc      if self.when == 'S':self.interval = 1 # one secondself.suffix = "%Y-%m-%d_%H-%M-%S"self.extMatch = r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}$"elif self.when == 'M':self.interval = 60 # one minuteself.suffix = "%Y-%m-%d_%H-%M"self.extMatch = r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}$"elif self.when == 'H':self.interval = 60 * 60 # one hourself.suffix = "%Y-%m-%d_%H"self.extMatch = r"^\d{4}-\d{2}-\d{2}_\d{2}$"elif self.when == 'D' or self.when == 'MIDNIGHT':self.interval = 60 * 60 * 24 # one dayself.suffix = "%Y-%m-%d"self.extMatch = r"^\d{4}-\d{2}-\d{2}$"elif self.when.startswith('W'):self.interval = 60 * 60 * 24 * 7 # one weekif len(self.when) != 2:raise ValueError("You must specify a day for weekly rollover from 0 to 6 (0 is Monday): %s" % self.when)if self.when[1] < '0' or self.when[1] > '6':raise ValueError("Invalid day specified for weekly rollover: %s" % self.when)self.dayOfWeek = int(self.when[1])self.suffix = "%Y-%m-%d"self.extMatch = r"^\d{4}-\d{2}-\d{2}$"else:raise ValueError("Invalid rollover interval specified: %s" % self.when)self.extMatch = re.compile(self.extMatch)self.interval = self.interval * interval # multiply by units requestedif os.path.exists(filename):t = os.stat(filename)[ST_MTIME]else:t = int(time.time())self.rolloverAt = self.computeRollover(t)

关键是下面的几行

self.suffix = "%Y-%m-%d_%H-%M-%S"
self.extMatch = r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}$"
······
······
self.extMatch = re.compile(self.extMatch)

默认设置when类型后,suffix是固定的,匹配的正则也是源码里写好的,所以当修改suffix后,必须连带正则一并修改

最终代码如下

log = logging.getLogger()
log.setLevel(logging.ERROR)  # 日志等级为ERRORfh = logging.handlers.TimedRotatingFileHandler("log", when='S', interval=1, backupCount=3)
fh.suffix = "%Y-%m-%d_%H-%M-%S.log"
fh.extMatch = r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}.log$"
fh.extMatch = re.compile(fh.extMatch)
formatter = logging.Formatter('[%(asctime)s] - %(filename)s [Line:%(lineno)d] - [%(levelname)s]-[thread:%(thread)s]-[process:%(process)s] - %(message)s')
fh.setFormatter(formatter)
log.addHandler(fh)
i = 0
while i < 100000000:sleep(0.1)log.error("记录" + str(i))i = i + 1

2021-01-22 Python TimedRotatingFileHandler 修改suffix后无法自动删除文件相关推荐

  1. 鼠标选中后会自动删除文件的现状及解决方案

    Window10系统,鼠标选中文件后自动删除文件 发生的问题 解决的方法 结果检证 发生的问题 目前系统重装完成之后会出现鼠标选中文件会自动删除的状况,有疑问的地方是拔掉外接的机械键盘和鼠标单单用笔记 ...

  2. Leetcode刷题 2021.01.22

    Leetcode刷题 2021.01.22 Leetcode1042 不邻接植花 Leetcode1010 总持续时间可被 60 整除的歌曲 Leetcode1091 二进制矩阵中的最短路径 Leet ...

  3. c#:Reflector+Reflexil 修改编译后的dll/exe文件

    原文:c#:Reflector+Reflexil 修改编译后的dll/exe文件 不知道大家有没有这样的经历:现场实施时测试出一个bug,明明知道某个dll/exe文件只要修改一二行代码即可,但手头没 ...

  4. Python 8行代码模拟鼠标自动删除微信收藏

    上回我们提到了用 pyuserinput 进行模拟键盘鼠标操作,结果发现很多同学都回复无法安装成功,即便安装成功了还是存在很多问题.确实,pyuserinput存在不少问题,包括其安装的pymouse ...

  5. python 自动删除文件_python--自动删除文件

    java实现创建临时文件然后在程序退出时自动删除文件(转) 这篇文章主要介绍了java实现创建临时文件然后在程序退出时自动删除文件,从个人项目中提取出来的,小伙伴们可以直接拿走使用. 通过java的F ...

  6. 用Python在Windows或Linux下批量删除文件夹中指定的文件

    情况说明:当在一个文件夹下面有好几十个或几百个文件需要删除,此时一一去挑选费时费力,特别是在Linux下面.因此,需要批量删除文件. 对训练样本(图像)和测试样本(图像)进行评估时候,需要查看是数据本 ...

  7. 谷歌插件.crx文件下载后被自动删除的解决方法

    目录 一.问题描述 二.解决方法 1.改后缀名 2.解压 3.加载已解压的扩展程序 4.加载成功 一.问题描述 谷歌插件.crx文件下载后几秒之内会被自动删除,无法使用. 二.解决方法 1.改后缀名 ...

  8. 2021.5.22 Python爬虫实战:效率办公,从下载文献开始...

    在百度学术中,当我们查找论文原文时,需要知道该论文的DOI(Digital Object Identifier),通过它可以方便.可靠地链接到论文全文.但是,如果我们所需查找的同主题论文数目繁多,这时 ...

  9. python批量修改文件名_python实现批量改文件名称的方法

    这篇文章主要介绍了python实现批量改文件名称的方法,涉及Python中os模块rename方法的相关使用技巧,需要的朋友可以参考下 python实现批量改文件名称的方法 本文实例讲述了python ...

最新文章

  1. java使用数据库连接池连接MySQL/MariaDB--DBCP2
  2. const常量和readonly常量区别
  3. 【JavaScript】Canvas绘图整理
  4. 大气自适应会员中心帝国cms模板
  5. access下如何配置两个vlan_不同vlan间的通信如何简单配置(三种方式) ?
  6. LeNet-5——CNN经典网络模型详解(pytorch实现)
  7. 200 行代码实现一个滑动验证码
  8. python 画线置顶_绘制分支[置顶] python学习~递归函数
  9. 如何查看linux的版本?
  10. Building Document Workflows in SharePoint 2007 翻译
  11. windows远程控制服务器
  12. java生成word并导出pdf
  13. Java语言泛型方法
  14. 《孙子兵法》十三篇注译(5--形篇)
  15. Java基础题26:(多选题)下列哪些选项属于Java技术体系()
  16. 软件测试实例-如何测试一个杯子
  17. 兼容低版本IE浏览器的一些技巧分享
  18. Linux文件系统层级结构图和vim中三个模式的命令
  19. AI路径查找器的使用
  20. mSystems:华南农大揭示水稻SST基因调控根际微生物协同耐盐机制

热门文章

  1. Python入门100题 | 第036题
  2. MongoDB导出csv格式数据
  3. QT中添加背景图片,颜色,以及字体等
  4. 使用KNN对MNIST数据集进行实验
  5. lucene源码分析(3)facet实例
  6. Example of BeanFactoryAware in Spring--转
  7. 元宇宙iwemeta: 苹果Apple推动元宇宙产业的生态体系
  8. JS中map()与forEach()的用法
  9. 微信8年,干掉了短信也杀死了媒体?
  10. Newton-Raphson method