python - python中的压缩(存档)旧日志文件

标签 python logging archive

我在 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/

相关文章:

python - 在python中清除变量

python multiprocessing - 将子进程日志记录发送到在父进程中运行的 GUI

java - 在java中,如何在线程中获取文件名

java - 停止 quartz 调试日志记录 log4j

html - 从具有每日存档的静态 HTML/CSS 单页站点创建可搜索存档

C++ 跨平台归档操作/显示

python - 四元组.错误 : Supplied function does not return a valid float in python

python - 当 __hash__ 和 __eq__ 无法在没有参数的情况下调用时,Python 的 dict 如何将类型作为键进行管理?

python - 如何确保两个Python列表中的元素数量相等?

ios - Xcode 10 : Where is the don't code sign option in Code Signing Identity