【发布时间】:2017-10-04 20:33:06
【问题描述】:
我无法让日志文件轮换在 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 旋转文件处理程序,我想修正我的错误。如果我认为需要方法覆盖是正确的,我希望从社区中做过类似事情的人那里得到一个例子。提前感谢您的帮助。
【问题讨论】:
-
stackoverflow.com/questions/8467978/… 这就是你要找的..