我无法在Python(v2.6.6)中使用日志文件轮换。我需要使用TimedRotatingFileHandler找到的日志文件扩展名的命名控件,以及使用RotatingFileHandler强制执行大小阈值的日志文件轮换的能力。
如果我建立类型为TimedRotatingFileHandler的日志处理程序fh,我可以在旋转的日志文件的扩展名中包含DT戳记。我这样做是这样的:
fh = logging.handlers.TimedRotatingFileHandler('/mydirpath/logs/logFileBaseName', when='H', interval=1, backupCount=48)
fh.suffix = '%Y%m%d_%H%M%S'
fh.extMatch = re.compile(r"^\d{8}\_\d{6}$")
但是,显然如果我的python脚本在间隔发生时没有主动写入日志,则日志不会旋转。单个日志文件增长并增长到极端大小。
作为替代方案,我尝试了一个简单的RotatingFileHandler。它似乎给了我指示日志轮换的能力,因为它允许我指定一个大小阈值。一旦达到该阈值或甚至在接近该阈值时,日志就会旋转。这就是我在这种处理程序类型中建立fh的方式:
fh = logging.handlers.RotatingFileHandler('/mydirpath/logs/logFileBaseName', maxBytes=7000000, backupCount=48)
使用RotatingFileHandler确实按预期旋转了日志,但似乎我无法将DT标记添加到旋转的日志文件扩展名中。正如文档中详述的那样,我得到.1,.2,.3等的扩展。我必须在旋转的日志文件的扩展名中包含这些DT。
我怀疑我需要使用RotatingFileHandler但是使用覆盖方法来自定义旋转日志文件的扩展名。我还没精通python,也不知道如何识别日志包中要覆盖的正确方法。我也不知道如何在python类中建立这样的覆盖方法来覆盖包类中的方法。
我希望得到一些帮助。如果我误解或误用python旋转文件处理程序,我想修复我的错误。如果我是正确的,需要方法覆盖,我希望从社区中做过类似事情的人那里得到一个例子。提前感谢您的任何帮助。
答案 0 :(得分:0)
你真的不想那样。文件名约定不是偶然的,但允许确保您的日志记录系统正常运行:
话虽这么说,所有常见的文件系统都将文件的创建和修改时间作为文件属性,因此您可以构建一个python脚本,使用创建时间以新名称复制/移动文件。这样你就不会弄乱Python日志系统,只需要使用os.stat
编写一个易于编写和测试的脚本。