python - 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
任何输入都会有所帮助!
谢谢 !
解决方案
最简单的方法是创建一个函数来执行此操作并将其作为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)