自定义旋转器和命名器函数不能与 python 中的 RotatingFileHandler 记录器处理程序一起使用?
Custom rotator and namer functions not working with RotatingFileHandler logger handler in python?
我在下面提到 link 使用旋转器和命名器函数,但它们不起作用(没有任何区别)
我希望将日志压缩并命名为 system1.log.gz,但它们的保存方式为 system.log.1,因此我进行了以下更改,但仍然无法正常工作。
环境:python2.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 中根本不存在。最好的解决方案是使用 python 3,因为版本 2 将 retire in a few months。如果这不是一个选项,您可以通过创建自己的处理程序 class 来实现所需的行为,该处理程序继承自 RotatingFileHandler
并覆盖 emit
和 doRollover
。 emit
需要压缩,doRollover
命名。
我在下面提到 link 使用旋转器和命名器函数,但它们不起作用(没有任何区别)
我希望将日志压缩并命名为 system1.log.gz,但它们的保存方式为 system.log.1,因此我进行了以下更改,但仍然无法正常工作。
环境:python2.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 中根本不存在。最好的解决方案是使用 python 3,因为版本 2 将 retire in a few months。如果这不是一个选项,您可以通过创建自己的处理程序 class 来实现所需的行为,该处理程序继承自 RotatingFileHandler
并覆盖 emit
和 doRollover
。 emit
需要压缩,doRollover
命名。