我在 Python 中使用标准记录器库。例如,有 RotatingFileHandler,可以每天轮换日志文件。
但它只是重命名它们。如果它不仅可以重命名,还可以将旧文件放入 zip(或 gz、bzip 等)存档中,那就太好了。
有没有简单的方法可以做到这一点?
最佳答案
我认为您最好的选择是扩展 RotatingFileHandler像这样(未测试):
import os
from logging.handlers import RotatingFileHandler
COMPRESSION_SUPPORTED = {}
try:
import gzip
COMPRESSION_SUPPORTED['gz'] = gzip
except ImportError:
pass
try:
import zipfile
COMPRESSION_SUPPORTED['zip'] = zipfile
except ImportError:
pass
class NewRotatingFileHandler(RotatingFileHandler):
def __init__(self, *args, **kws):
compress_mode = kws.pop('compress_mode')
try:
self.compress_cls = COMPRESSION_SUPPORTED[compress_mode]
except KeyError:
raise ValueError('"%s" compression method not supported.' % compress_mode)
super(NewRotatingFileHandler, self).__init__(self, *args, **kws)
def doRollover(self):
super(NewRotatingFileHandler, self).doRollover()
# Compress the old log.
old_log = self.baseFilename + ".1"
with open(old_log) as log:
with self.compress_cls.open(old_log + '.gz', 'wb') as comp_log:
comp_log.writelines(log)
os.remove(old_log)
关于python - python中的压缩(存档)旧日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7010294/