首页 > 解决方案 > 创建最多一定数量的文件

问题描述

我有一个记录器,每次运行都会创建一个新文件。在新的运行中,我在写入之前重命名日志(参见代码片段)以保留最后一个日志。如何修改代码以保存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)

标签: pythonlogging

解决方案


查看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()

注意:您似乎不能直接使用此处理程序而不是您的自定义处理程序,因为它不会为每次运行旋转文件(就像您似乎需要的那样)


推荐阅读