Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自定义rotator和namer函数不能与python中的RotatingFileHandler记录器一起使用?_Python_Logging_Zlib_Filehandler_Log Rotation - Fatal编程技术网

自定义rotator和namer函数不能与python中的RotatingFileHandler记录器一起使用?

自定义rotator和namer函数不能与python中的RotatingFileHandler记录器一起使用?,python,logging,zlib,filehandler,log-rotation,Python,Logging,Zlib,Filehandler,Log Rotation,我在下面提到了使用旋转器和命名器函数的链接,但它们不起作用(没有任何区别) 链接: 我希望日志被压缩并命名为system1.log.gz,但它们像system.log.1一样保存,因此我做了以下更改,但仍然不起作用 环境:python 2.7.5 import logging import os import zlib from logging.handlers import RotatingFileHandler LOG_PATH = "/tmp" FILE_NAME = "system.lo

我在下面提到了使用旋转器和命名器函数的链接,但它们不起作用(没有任何区别)

链接:

我希望日志被压缩并命名为system1.log.gz,但它们像system.log.1一样保存,因此我做了以下更改,但仍然不起作用

环境:python 2.7.5

import logging
import os
import zlib
from logging.handlers import RotatingFileHandler
LOG_PATH = "/tmp"
FILE_NAME = "system.log"

Logger = logging.getLogger()

def namer(name):
    orig_name = name.split(".")
    return orig_name[0] + orig_name[2] + ".log.gz"


def rotator(source, dest):
    with open(source, "rb") as sf:
        data = sf.read()
        compressed = zlib.compress(data, 9)
        with open(dest, "wb") as df:
            df.write(compressed)
    os.remove(source)

logFormatter = logging.Formatter(
    "%(asctime)s %(levelname)s [%(threadName)s] %(filename)s:%(lineno)d %(message)s")
Logger.setLevel(logging.DEBUG)

fileHandler = RotatingFileHandler(
"{0}/{1}".format(LOG_PATH, FILE_NAME), maxBytes=1000,    backupCount=10)
fileHandler.setFormatter(logFormatter)
fileHandler.rotator = rotator
fileHandler.namer = name
Logger.addHandler(fileHandler)
预期的压缩日志名称:system1.log.gz


实际的非压缩日志名:system.log.1

您正在使用python 3的烹饪书,但使用python 2.7.5运行代码。您尝试使用的功能在3中根本不存在。最好的解决方案是像版本2一样使用python 3。如果这不是一个选项,您可以通过创建自己的处理程序类来实现所需的行为,该类继承自
RotatingFileHandler
,并覆盖
emit
doRollover
emit
需要进行压缩,而
doRollover
需要进行命名。

明白了,我只在doRollover中进行了压缩和命名,它正在工作!非常感谢。