首页 > 解决方案 > RotatingFileHandler 写入不同的文件夹进行备份

问题描述

我正在使用 Python 记录器,创建一个日志文件 ( /opt/feedlog.log)

我特别想创建一个备份文件夹来存档旧的日志文件

/opt/archive

将包含

/opt/archive/feedlog.log.1
/opt/archive/feedlog.log.2
/opt/archive/feedlog.log.3

下面是我的示例代码:

import logging
from logging.handlers import RotatingFileHandler

logger = logging.getLogger('feed_logger')
logger.setLevel(logging.DEBUG)
handler = RotatingFileHandler('/opt/feedlog.log', maxBytes=1000, backupCount=10)
logger.addHandler(handler)

for _ in range(10000):
        logger.warning('Hello world !!!')

有什么办法可以强制在不同的文件夹而不是原始文件夹RotatingFileHandler中创建备份文件。archive

任何输入都会有所帮助!

谢谢 !

标签: pythonlogging

解决方案


最简单的方法是创建一个函数来执行此操作并将其作为rotator参数传递给RotatingFileHandler.
另一种方法是创建自己的RotatingFileHandler. 它应该比听起来更容易。查看https://docs.python.org/3/library/logging.handlers.html#logging.handlers.RotatingFileHandler您所需要的只是创建自己的类,继承自该类并覆盖rotate

from logging.handlers import RotatingFileHandler

class MyRotatingFileHandler(RotatingFileHandler):
    # copied from python source
    def rotate(self, source, dest): # change the destination here
        if not callable(self.rotator):
            # Issue 18940: A file may not have been created if delay is True.
            if os.path.exists(source):
                os.rename(source, dest)
        else:
            self.rotator(source, dest)

推荐阅读