python - 创建最多一定数量的文件
问题描述
我有一个记录器,每次运行都会创建一个新文件。在新的运行中,我在写入之前重命名日志(参见代码片段)以保留最后一个日志。如何修改代码以保存N
过去的日志?我可以遍历所有N
文件并将它们“移动”回 1(0 到 1、1 到 2 等),并在之后删除所有日志,N
但这不是很漂亮。有更好的建议吗?
folder = "/home/user/log/"
log_path = os.path.join(folder, 'run.log')
backup_log(log_path) # renames run.log to run0.log and overwrites it if exists
logging.basicConfig(format='%(asctime)s %(message)s', filename=log_path,level=logging.DEBUG)
解决方案
查看RotatingFileHandler.doRollover()
内置日志模块的源代码:
它确实循环遍历每个文件并重命名它,没有“更漂亮”的方式来批量执行它。
def doRollover(self):
"""
Do a rollover, as described in __init__().
"""
if self.stream:
self.stream.close()
self.stream = None
if self.backupCount > 0:
for i in range(self.backupCount - 1, 0, -1):
sfn = self.rotation_filename("%s.%d" % (self.baseFilename, i))
dfn = self.rotation_filename("%s.%d" % (self.baseFilename,
i + 1))
if os.path.exists(sfn):
if os.path.exists(dfn):
os.remove(dfn)
os.rename(sfn, dfn)
dfn = self.rotation_filename(self.baseFilename + ".1")
if os.path.exists(dfn):
os.remove(dfn)
self.rotate(self.baseFilename, dfn)
if not self.delay:
self.stream = self._open()
注意:您似乎不能直接使用此处理程序而不是您的自定义处理程序,因为它不会为每次运行旋转文件(就像您似乎需要的那样)
推荐阅读
- matlab - 如何从 Simulink 到 Matlab 获得非线性系统的响应曲线特征(上升时间、稳定时间、稳态、过冲)?
- flutter - 单击文本按钮颤动时如何显示包含卡片的ListView
- mysql - SQL 查询性能问题不存在
- java - 在sleuth中添加新标签应该怎么做,比如客户端ip地址,我想在日志中添加客户端ip地址,当然有traceId,spanId
- typescript - 我可以强制 TypeScript 解析 Pick 的类型吗
展示? - java - 如何阅读列表
- > 在 Android 中使用 Parcelable
- python - 使用 SQLite 时 SQLAlchemy 中的绑定参数冲突
- javascript - 在 Ext JS 中将字段标签设置为 HTML 字符串
- algorithm - 伪代码格式
- uuid - JDK 11 生成的 UUID 版本是多少?