我正在尝试实现RotatingFileHandler,但是将其中的每个“完整”日志文件都移动到另一个位置并重命名。到目前为止,我所拥有的是一个继承自RotatingFileHandler的类,并且具有以下重写的函数:
def doRollover(self):
print ("Rollover started")
try:
RotatingFileHandler.doRollover(self)
self.stream.close()
if self.backupCount > 0:
for i in range(self.backupCount - 1, 0, -1):
sfn = "%s.%d" % (self.baseFilename, i)
print ("source: " + sfn)
if os.path.exists(sfn):
filename_w_extension = os.path.split(self.baseFilename)
print ("file_name with extension: " + filename_w_extension)
dfn = self.destination_dir + filename_w_extension
if os.path.exists(sfn):
print ("Source: " + sfn)
if os.path.exists(dfn):
print ("Destination: " + dfn + " exists")
os.remove(dfn)
else:
print ("Destination doesn't exist" + dfn)
os.rename(sfn, dfn)
print ("Rename done")
else:
print "sfn was not found"
dfn = self.baseFilename.split("_")[0]
dfn += datetime.datetime.today().strftime('%m%d%Y_%H%M')
print ("New file name: " + dfn)
if os.path.exists(dfn):
os.remove(dfn)
os.rename(self.baseFilename, dfn)
self.backupCount = 0
self.mode = 'w'
self.stream = self._open()
except Exception as exp:
print ("error occured " + exp)
print ("Stream open")
在for循环之后,我无法进行任何测试,因为翻转事件在应用启动后立即发生,并且日志文件在此之后再也不会旋转。从本质上讲,在执行几秒钟后,我剩下的是一个空的日志文件。我将如何制作一个旋转的日志文件处理程序,以将已完成的文件移动到设备上的其他位置(更具体地说是外部存储)?请注意,我将backupCount
设置为10,并重写了emit
函数来调用doRollover
。
谢谢!